5

我有很多类实例,MyClass它们必须对来自另一个类的一些生成事件做出反应MyEventClass。我该怎么做?

我的第一个想法是在 中定义一个监听器MyEventClass并在 中实现它MyClass,但这需要为每个实例MyClass设置监听器,并且除了将监听器定义为MyEventClass.
很多代码/工作。

我认为的另一个选择是使用广播 inMyEventClass和接收器MyClass,但我不确定,也许是矫枉过正,并且接收器也将被注册(并且未注册onStop()

第三种选择是为 class 定义侦听器实现MyClass,而不是为每个实例定义,这将非常适合,但我不知道这是否可能以及如何进行编码。

然而,我刚刚提出的第四个选项是在 的父类上实现侦听器,MyClass并且仅将此侦听器设置为MyEventClass,然后在事件发生循环中遍历所有MyClass实例并手动调用它们的侦听器。这让我不用注册每个实例MyEventClass

4

2 回答 2

3

我想Observer design pattern会是你最好的选择。。

观察者模式是一种软件设计模式,其中称为主体的对象维护其依赖项列表(称为观察者),并自动通知他们任何状态更改,通常通过调用他们的方法之一。主要用于实现分布式事件处理系统

您可以使用数千个其他链接检查这些链接1 链接2

于 2013-05-10T18:50:37.143 回答
0

StinePike 就在这一点上,这是编码时遇到的一个非常标准的问题。观察者(或 Java 中的监听器)模式是对此的标准实践解决方案。你应该使用你的第一个提议,你的措辞有点不清楚,所以我会为你列出来,以防我不太清楚。

让我们MyEventClass提供一个 Listener 接口,例如MyEventClassListener,以及添加/删除方法。然后MyClass可以将自己附加/分离为侦听器。如果您需要,这是一个代码示例:

MyEventClass.java

public class MyEventClass {

    private Set<MyEventClassListener> listeners = new HashSet<MyEventClassListener>();

    // Your code here...

    public void addListener(MyEventClassListener listener) {
        listeners.add(listener);
    }

    public void removeListener(MyEventClassListener listener) {
        listeners.remove(listener);
    }

    public void notifyListeners() {
        for (MyEventClassListener listener : listeners) {
            listener.somethingHappened();
        }
    }

}

MyEventClassListener.java

public interface MyEventClassListener {

    public void somethingHappened();

}

MyClass.java

public class MyClass implements MyEventClassListener {

    MyEventClass myEventClass;

    // Your code here..

    public void someFunction() {
        // Add as listener
        myEventClass.addListener(this);
    }

    @Override
    public void somethingHappened() {
        // Act on callback
    }

}
于 2013-05-10T19:45:06.380 回答