一个主体有多个观察者



使用哪种设计模式或如何实现,以便一个主体可以有多个观察者,并且主体可以在必要时通知特定的观察者。在经典的观察者模式中,有一个函数用于一次性通知一个观察者或一组观察者,它不能通知特定的观察者

观察者模式及其更通用的变体发布-订阅习惯用法用于可观察对象从知道其观察者中解耦。

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

还可以使用publish-subscribe/event bus为每个特定的观察者创建一个主题,让观察者订阅特定的主题并向该主题发送事件/发布

虽然我同意@mantrid所说的,但您仍然可以使用具有过滤支持的观察者模式或使用Pull模型。对于第一个选项,添加一个方法到你的观察者接口,如:IsInterested(Object context),这个方法将被所有观察者上的主体调用,以决定它们是否应该接收通知,并且主体可以通过context参数为观察者提供一些信息来帮助它决定。对于第二个选项,使用Pull模型,其中您的Subject通知所有观察者一些状态变化,并且这些观察者可以选择进一步请求或不请求(他们想要的信息)来自主题的新状态信息。

最新更新