oop – 如何使用回调时如何避免循环依赖?

前端之家收集整理的这篇文章主要介绍了oop – 如何使用回调时如何避免循环依赖?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当您设计两个具有生产者/消费者关系的课程时,如何避免循环依赖?这里ListenerImpl需要引用Broadcaster才能注册/注销自己,而Broadcaster需要一个引用回侦听器才能发送消息.这个例子是 Java,但它可以应用于任何OO语言.
public interface Listener {
  void callBack(Object arg);
}
public class ListenerImpl implements Listener {
  public ListenerImpl(Broadcaster b) { b.register(this); }
  public void callBack(Object arg) { ... }
  public void shutDown() { b.unregister(this); }
}
public class Broadcaster {
  private final List listeners = new ArrayList();
  public void register(Listener lis) { listeners.add(lis); }
  public void unregister(Listener lis) {listeners.remove(lis); }
  public void broadcast(Object arg) { for (Listener lis : listeners) { lis.callBack(arg); } }
}
我不认为这是循环依赖.

听众什么也没有.

ListenerImpl取决于监听器和广播者

广播者依赖于听众.

Listener
       ^        ^
      /          \
     /            \
Broadcaster <--  ListenerImpl

所有箭头在侦听器结束.没有循环.所以,我想你没事.

猜你在找的设计模式相关文章