我正在制定一个游戏项目的布局,并为“抽象游戏世界”的实现提出了一些具体的想法。
在这个游戏世界中,一切都被表示为一个游戏对象(车辆、单位、粒子效果……)。我想保持这些对象隔离,以便在运行时它们之间不存在任何依赖关系。
为此,我让对象请求其他对象的 ID,以便它们可以相互发送消息,然后将消息传递给具有该 ID 的对象。
我必须解决的问题是要有一种从其他对象请求数据的方法。例如,车辆当前是否有司机。我已经考虑了一些方法来做到这一点,但到目前为止,我最接近的是一种特殊类型的消息,其中发送方向另一个对象发送特殊消息,接收对象应将请求的数据放入其中目的。
这是我为说明对象如何工作而编写的“存根”:
public class DataRequestMessage extends Message {
public final RequestedDataType dataType;
private boolean requestedDataReceived = false;
private String stringValue;
public DataRequestMessage(MessageType type, RequestedDataType dataType) {
super(type);
this.dataType = dataType;
}
public void setString(String value) {
if(requestedDataReceived) {
throw new RuntimeException("The content of the data request object has already been set");
}
if(dataType != RequestedDataType.String) {
throw new RuntimeException("Data type object expects a value of type " + dataType + ", but received one of type String.");
}
requestedDataReceived = true;
this.stringValue = value;
}
public String getString() {
if(dataType != RequestedDataType.String) {
throw new RuntimeException("This data type object has type " + dataType + ", and can therefore not return a String value.");
}
return stringValue;
}
}
如您所见,当该对象未按预期使用时,它将成为雷区。但是,我仍然担心一个对象期望另一个对象做某事,从而在两者之间产生依赖关系。
这种方法是从其他对象请求任意数据的好方法吗?或者期望另一个函数对提供的对象执行操作总是一个坏主意?