【发布时间】:2011-04-27 12:18:15
【问题描述】:
有了观察者模式,我们都知道,根据它的类图,SUBJECT 使用对 OBSERVER 的引用。同时,OBSERVER 有一个对 SUBJECT 的引用,以便注册或删除自己。
这是“循环引用”吗?
【问题讨论】:
有了观察者模式,我们都知道,根据它的类图,SUBJECT 使用对 OBSERVER 的引用。同时,OBSERVER 有一个对 SUBJECT 的引用,以便注册或删除自己。
这是“循环引用”吗?
【问题讨论】:
当然,这是一个循环引用。这是参考图中的一个循环。
在谈论更有害的事情时有时会使用术语“循环引用”,特别是当您具有循环依赖项时(例如,A 需要 B 编译,但 B 需要 A 编译)。
循环引用本身并无害(例如:循环链表)。
【讨论】:
正如您所描述的,这是循环引用的情况。但是请注意,在the full pattern 中,Observer 是一个抽象类/接口,它具有一个或多个具体实现。 Observer 在某些变体中对Subject 一无所知(尽管它的子类可能引用它),在其他变体中它可能依赖于Observable 接口或直接依赖于Subject。然而,Subject 只知道Observer,而不知道它的具体子类。
所以引用不是(必然)循环的。
【讨论】: