ilo*_*mbo 5 events android listener android-broadcast
我有很多类的实例MyClass
,它们全部都从另一个类的一些生成的事件作出反应MyEventClass
.我该怎么做?
我的第一个想法是定义一个监听器MyEventClass
并在其中实现它MyClass
,但这需要每个实例MyClass
设置监听器,并且除了将监听器定义为数组之外MyEventClass
.
很多代码/工作.
我认为另一种选择是使用广播MyEventClass
和接收器MyClass
,但我不确定,可能是过度使用,接收器也要注册(并且未注册onStop()
)
第三种选择是为类定义监听器实现MyClass
,而不是为每个实例定义,这将完全适合,但我不知道它是否可行,我该如何编写它.
然而,我刚刚提出的第四个选项是在父类上实现监听器,MyClass
并且只设置此监听器MyEventClass
,然后在事件发生循环中通过所有MyClass
实例并手动调用其监听器.这节省了我注册每个实例MyEventClass
.
StinePike 在这一点上是正确的,这是编码时遇到的一个非常标准的问题。观察者(或 Java 中的监听器)模式是对此问题的标准实践解决方案。你应该使用你的第一个建议,你的措辞有点不清楚,所以我会为你列出它,以防我不太清楚。
让我们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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
MyEventClassListener.java
public interface MyEventClassListener {
public void somethingHappened();
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1131 次 |
最近记录: |