我有一个专门的对象类,它向其组件发送消息,以便它们可以根据需要更改自身。对象类允许我混合和匹配组件,这样我就可以拥有具有相似功能的不同对象,而无需庞大的继承树。 (我认为这称为组件模式。)这就是我想要做的:
//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 类以便我可以从中获取不同类类型的信息?我需要更改组件类处理消息的方式吗?
最佳答案
I have a specialized object class that sends messages to its components so that they can change themselves as needed.
执行此类操作的正常(且简单)方法是使用 Java 的内部事件发布机制。您定义一个表示事件的类,以及事件监听器/使用者必须使用“事件发生”回调方法实现的接口(interface)。事件生产者有一个用于注册事件消费者的 register 方法,并保存已注册消费者的列表。当生产者想要发送事件时,它会创建一个事件对象,然后为所有注册的消费者调用“事件发生”回调。
这种方法在 Java 的 GUI 库和其他地方都使用。它是轻量级且高效的......并且可能比通过消息传递来做这种事情更好。
开始了解事件的一个好地方是 Introduction to Event Listeners在 Swing 教程中。
关于java - 如何实现一个消息发送系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11183227/