与观察者模式相反的是什么?

时间:2011-02-10 02:58:21

标签: oop design-patterns observer-pattern

据我了解,观察者模式允许多个观察者监视单个主题。是否存在相反情况的模式?是否存在监视多个主题的单个观察者的模式,并且当其中任何一个主体提出时会响应,例如,通知事件?

5 个答案:

答案 0 :(得分:14)

仍然可以使用Observer模式:只需将相同的对象注册为许多受监视对象的观察者。您可能希望“Notify”事件接收某种观察对象标识符(“this”指针,唯一ID号等),以便观察者对象可以选择适合于报告事件的对象的操作。 / p>

答案 1 :(得分:3)

是。它只是观察者模式的另一种应用。

观察者将自己添加到许多主题中。 如果您希望执行相同的操作,无论您正在观察哪个主题,那么这与您正在使用的观察者模式完全相同。

如果您需要单独的操作,具体取决于哪个主题触发了事件,那么您可以使用传递给Observer的ActionPerformed方法的Action参数来帮助确定触发事件的主题。 (这些名称可能会根据您选择的语言或库而变化)

答案 2 :(得分:1)

如果观察者监视器的对象是相似的,那么你可以让观察者监视它们,如果没有,我认为你最好分开监视器,那么你将遵循单一的责任规则。

答案 3 :(得分:1)

还要考虑相关的Mediator模式。

  

Mediator模式定义了一个对象,该对象封装了一组对象如何交互(Wikipedia

此处有更多信息:http://sourcemaking.com/design_patterns/mediator

我也非常喜欢@ CDC在Mediator Vs Observer Object-Oriented Design Patterns上的答案:

  

观察者模式:定义对象之间的一对多依赖关系,以便当一个对象更改状态时,将自动通知和更新其所有依赖项。

     

介体模式:定义一个封装一组对象如何交互的对象。 Mediator通过使对象明确地相互引用来促进松散耦合,并且它允许您独立地改变它们的交互。

答案 4 :(得分:0)

如果您只希望观察者做出反应一次,无论有多少监视对象引发事件,那么一旦第一个源触发事件,您将不得不让部分事件处理程序“取消注册”来自所有其他源的观察者,或者您必须决定应该使用多长时间或什么时间标准来决定何时来自另一个事件(或在某个定义的间隔后再次使用同一来源)应该导致观察者再次作出反应...