背景:
问题:
可能的解决方案(以及不使用它们的原因):
1)在每个父对象实例中注册一个BroadcastReceiver,并允许每个grand child在Intent级别上通知事件。这应该允许主对象通知我的用户有关该事件的信息。 问题是多个实例需要多个BroadcastReceivers,我希望它们很重或只是不太理想。
2)注册一个BroadcastReceiver并找到一种方法让它决定应该通知哪个对象实例,并实际发送给它。问题是我不确定如何通知对象本身。
3)让回调接口作为参数从父级传递给每个子/ grandchilren / etc ......但这会很混乱。
4)使用像EventBus库这样的东西(据我所知,它与BroadcastReceiver相同,只有基于反射,因此速度较慢)。
5)还有别的吗?
答案 0 :(得分:0)
我不知道这是否是最适合您的解决方案,但我认为如果我能正确理解您的要求,它会起作用。
public class Listener extends Observable implements Observer {
private List<Observer> clients = new ArrayList<>();
public void addClient(Observer client){
clients.add(client);
}
@Override
public void update(Observable o, Object arg) {
for(Observer client : clients){
client.update(o, arg); // Or whatever you need to do
}
}
public class DataSource extends Observable {
private Observer observer;
public DataSource(Observer o){
observer = o;
}
// Notify observer of changes at appropriate time
}
public class Consumer implements Observer {
public Consumer(){
Listener listener = ...;
listener.addClient(this);
}
@Override
public void update(Observable o, Object arg) {
// Handle appropriately
}
}
}
DataSource
是您的&#34;子对象&#34;,Consumer
是事件的最终客户端,Listener
是中间的类。我不知道客户为什么不能直接注册&#34;子对象&#34;但那就是你说的!为简单起见,这里建模为内部类,但我认为你不会这样做。