我有一个专门的对象类,发送消息到其组件,以便他们可以根据需要更改自己。对象类允许我混合和匹配组件,这样我就可以拥有具有类似功能的不同对象,而不需要很大的继承树。 (我想这就是所谓的组件模式。)这是我想做的事:如何实现消息发送系统?
//MyObject.java
public class MyObject {
private HashSet<MyComponent> components_;
void send(Message message) {
for (MyComponent component : components_) {
component.receive(message);
}
}
// other unrelated methods and variables...
}
// MyComponent.java
public interface MyComponent {
public void receive(Message message);
// other unrelated methods...
}
// RendererComponent.java
public class RendererComponent implements MyComponent {
public void receive(Message message) {
if (message.getType() == Message.Type.POSITION_CHANGED) {
Point positionDifference = message.getInfo();
redraw(positionDifference);
} else if (message.getType() == Message.Type.SCORE_CHANGED) {
Integer score = message.getInfo();
redraw(score);
} // else if...
}
private void redraw(Point positionDifference) {
// draws item at new position...
}
private void redraw(Integer score) {
// draws the new score...
}
// other unrelated methods and variables..
}
我有很多的部件,他们收到很多不同类型的消息。如何编写我的Message类,以便从中获取不同类别的信息?我是否需要改变组件类处理消息的方式?
我不太明白你的意思,我怎么写我的消息类,以便我可以从中获取不同类的信息?也许你可以提供一个你想要解决的问题的例子吗? –
@AlexLynch我希望我的Message类中的getInfo()方法返回具有不同类类型的不同信息(如我的RendererComponent示例所示),以便可以用不同方式处理信息。 – Eva
我不认为你的getInfo()可以返回一个Object?只要您使用getType()来确认您所接收的对象的类型,我不会预见任何类型安全问题 - 或者不管类型安全性如何,都不会泄气? –