Java 如何实现消息发送系统?

Java 如何实现消息发送系统?,java,generics,interface,Java,Generics,Interface,我有一个专门的对象类,它向它的组件发送消息,以便它们可以根据需要进行更改。对象类允许我混合和匹配组件,这样我就可以拥有具有类似功能的不同对象,而无需庞大的继承树。(我想这就是所谓的组件模式。)以下是我想做的: //MyObject.java public class MyObject { private HashSet<MyComponent> components_; void send(Message message) { for (MyCom

我有一个专门的对象类,它向它的组件发送消息,以便它们可以根据需要进行更改。对象类允许我混合和匹配组件,这样我就可以拥有具有类似功能的不同对象,而无需庞大的继承树。(我想这就是所谓的组件模式。)以下是我想做的:

//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..
}
//MyObject.java
公共类MyObject{
私有哈希集组件;
无效发送(消息){
对于(MyComponent组件:组件){
组件。接收(消息);
}
}
//其他不相关的方法和变量。。。
}
//MyComponent.java
公共接口MyComponent{
公共无效接收(消息);
//其他不相关的方法。。。
}
//RenderComponent.java
公共类RenderComponent实现MyComponent{
公共无效接收(消息){
if(message.getType()==message.Type.POSITION\u已更改){
点位置差=message.getInfo();
重新绘制(位置差异);
}else if(message.getType()==message.Type.SCORE\u已更改){
整数分数=message.getInfo();
重画(分数);
}//否则如果。。。
}
私有无效重绘(点位置差异){
//在新位置绘制项目。。。
}
私有无效重绘(整数分数){
//绘制新的分数。。。
}
//其他不相关的方法和变量。。
}
我有很多组件,它们接收许多不同类型的消息。如何编写消息类,以便从中获取不同类类型的信息?我是否需要更改组件类处理消息的方式

我有一个专门的对象类,它向它的组件发送消息,以便它们可以根据需要进行更改

完成这类工作的正常(且简单)方法是使用Java的内部事件发布机制。您定义了一个表示事件的类和一个接口,事件侦听器/使用者必须使用“事件发生”回调方法实现该接口。事件生成器具有注册事件使用者的注册方法,并保留已注册使用者的列表。当生产者想要发送事件时,它会创建一个事件对象,然后为所有注册的使用者调用“事件发生”回调

这种方法在Java的GUI库中以及其他地方都使用。它重量轻,效率高。。。这可能比通过消息传递来做这类事情更好



Swing教程中有一个开始学习事件的好地方。

听起来你想要的是一个。查看。

我不太明白您所说的
是什么意思,我如何编写消息类以便从中获取不同类类型的信息?
。也许您可以提供一个您试图解决的问题的示例?@AlexLynch我希望我的Message类中的getInfo()方法返回不同类类型的不同信息(如我的RenderComponent示例中所示),以便以不同的方式处理信息。我不认为您的getInfo()可以只返回一个对象吗?只要您使用getType()来确认接收的对象的类型,我就不会预见到任何类型安全问题——或者不管它是否非常类型安全都会被劝阻吗?我考虑过这一点,但我对是否可以将事件侦听器添加到不触发事件的类中感到困惑。你能举一个简短的例子说明如何用事件来实现它吗?还有,我如何确保只有同一对象的组件收到该对象的另一个组件发送的事件?@Eva-1)我添加了一个指向Swing教程相关部分的链接。2) 您可以安排每个组件对象向容器对象注册一个事件侦听器。如果您需要一个组件能够向其他组件发送事件,那么容器将需要公开一个方法来实现这一点。