一个科目有多个观察者

时间:2013-03-09 05:43:31

标签: php design-patterns

使用哪种设计模式或如何进行,以便一个主体可以拥有多个观察者,主体可以在必要时通知特定的观察者。在经典的观察者模式中,有一个函数用于同时通知一个观察者或观察者列表,它不能通知特定的观察者。

2 个答案:

答案 0 :(得分:2)

观察者模式及其更通用的变体发布 - 订阅习惯用法用于解析观察者与了解其观察者。

如果observable已经知道需要通知的特定对象的引用 - 只需直接调用该对象。

您还可以使用发布 - 订阅/事件总线 - 为每个特定观察者创建一个主题,让观察者订阅特定主题并将事件/发布发送到该主题。

答案 1 :(得分:1)

虽然我同意@mantrid所说的内容,但您仍然可以使用带有过滤支持的Observer模式或使用Pull模型。对于第一个选项,向Observer接口添加一个方法,如:IsInterested(Object context),其中所有观察者都会调用此方法来决定是否应该接收通知,并且主题可以通过Observer提供一些信息。 context参数可帮助它做出决定。对于第二个选项,使用Pull模型,其中您的主题通知所有观察者某些状态更改,并且这些观察者可以选择进一步请求或不请求(从他们想要的信息中提取)主题中的新状态信息。