我有很多类MyClass
的实例,而且 ALL 必须对来自另一个类MyEventClass
的某些生成的事件作出反应。我该怎么做?
我的第一个想法是在MyEventClass
中定义一个监听器并在MyClass
中实现它,但这需要MyClass
的每个实例设置监听器,并且除了定义将监听器作为MyEventClass
中的数组
很多代码/工作。
我认为另一种选择是MyEventClass
中的广播和MyClass
中的接收者,但我不确定,可能是过度使用,接收者也要注册(并且未注册{ {1}})
第三个选项是定义类onStop()
的监听器实现,而不是每个实例,这完全适合,但我不知道它是否可行,我该怎么做编码。
我刚刚提出的第四个选项是在MyClass
的父类上实现监听器,并且仅在MyClass
中设置此监听器,然后在事件发生循环中通过所有{{} 1}}实例并手动调用其侦听器。这节省了我使用MyEventClass
注册每个实例。
答案 0 :(得分:3)
我认为Observer design pattern
将是您的最佳选择..
观察者模式是一个软件设计模式,其中一个对象, 称为主题,维护其受抚养人名单,称为 观察者,并自动通知他们任何状态变化, 通常通过调用他们的方法之一。它主要用于实现分布式事件处理系统
答案 1 :(得分:0)
StinePike是正确的,这是编码时遇到的一个非常标准的问题。 Observer(或Java talk中的监听器)模式是此标准实践解决方案。你应该使用你的第一个命题,你的措辞有些不清楚,所以如果我不太清楚的话,我会把它给你。
让MyEventClass
提供一个监听器界面,如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
}
}