Oop 观察者模式的反面是什么?

Oop 观察者模式的反面是什么?,oop,design-patterns,observer-pattern,Oop,Design Patterns,Observer Pattern,据我所知,观察者模式允许多个观察者监视单个对象。是否有一种模式适用于相反的场景?是否有一种模式供单个观察者监视多个对象,并在其中任何一个对象引发(比如)通知事件时作出响应?观察者模式仍然可以使用:只需对多个监视对象使用与观察者相同的对象寄存器即可。您可能希望“Notify”事件接收某种观察对象标识符(“this”指针、唯一id号等),以便观察者对象可以选择适合报告事件的对象的操作。是。这只是观察者模式的另一个应用 《观察家》将自己添加到许多主题中。 如果您希望无论您正在观察哪个主题都执行相同的操

据我所知,观察者模式允许多个观察者监视单个对象。是否有一种模式适用于相反的场景?是否有一种模式供单个观察者监视多个对象,并在其中任何一个对象引发(比如)通知事件时作出响应?

观察者模式仍然可以使用:只需对多个监视对象使用与观察者相同的对象寄存器即可。您可能希望“Notify”事件接收某种观察对象标识符(“this”指针、唯一id号等),以便观察者对象可以选择适合报告事件的对象的操作。

是。这只是观察者模式的另一个应用

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


如果根据触发事件的主体需要单独的操作,则可以使用传递到观察者的ActionPerformed方法中的action参数来帮助确定触发事件的主体。(这些名称可能会根据您选择的语言或库而变化)

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

也可以考虑相关的中介模式。

中介模式定义了一个对象,该对象封装了一组对象如何交互()

更多信息请点击此处:

我也非常喜欢@CDC对以下问题的回答:

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

中介模式:定义一个对象,封装一组对象如何交互。Mediator通过防止对象彼此显式引用来促进松散耦合,并允许您独立地改变它们的交互


我的想法完全正确。这听起来仍然像是一种观察者模式。除非他只想让事件处理程序运行一次,不管有多少发布者触发事件。除此之外:(使用一个观察者“由设计者决定”)和(变体是“单观察者对多观察者”)@Charles:这有点含糊不清(也许是人为的),但尽我所能地运行它:如何将“事件”与下一个事件区分开来?只有当出版商自己得到一些标记,说“这是一个由潜在事件123触发的事件”时,才有可能,然后他们可以将其传递给顶级观察者,该观察者可以将123放入一组已处理的事件中,而忽略进一步的报告……感谢大家对此的澄清。@anon:感谢链接。我可能想在这里使用您的建议,因为我希望在主题引发其通知事件后禁用该主题。谢谢,WuHo,感谢您花时间进行讨论回答我的问题。这类似于只有一个观察者有多个观察者。因此,所有观察者在其状态改变时都会更新一个观察者,并且观察者在更新时仍然可以区分不同的观察者(观察者o,对象arg)调用。我觉得这里唯一的变化是,当新的可观察对象在运行时可用时,观察者应该动态地注册到新的可观察对象。这意味着当出现新的可观察对象时,必须与观察者通信以注册它。另一种方式是当出现新的观察者时;这个观察者对象总是在所以像可观察构造函数这样的东西应该在出现时接受单个观察者。