我有一个专门的对象类,它将消息发送到它的组件,以便它们可以根据需要自行更改。对象类允许我混合和匹配组件,这样我就可以拥有具有相似功能的不同对象,而不需要庞大的继承树。 (我认为这被称为组件模式。)这就是我想要做的事情:
//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类以便从中获取不同类类型的信息?我是否需要更改组件类处理消息的方式?
答案 0 :(得分:1)
我有一个专门的对象类,它将消息发送到它的组件,以便它们可以根据需要自行更改。
执行此类操作的正常(且简单)方法是使用Java的内部事件发布机制。您可以定义一个表示事件的类,以及一个事件侦听器/使用者必须使用“事件发生”回调方法实现的接口。事件生成器具有用于注册事件使用者的注册方法,并且保持注册的消费者的列表。当生产者想要发送一个事件时,它会创建一个事件对象,然后为所有注册的消费者调用“事件发生”回调。
这种方法在整个Java的GUI库和其他地方使用。它轻巧而高效......并且可能比通过消息传递做这种事情更好。
开始学习事件的好地方是Swing教程中的Introduction to Event Listeners。
答案 1 :(得分:1)