前言:观察者模式、发布订阅者模式很容易产生混淆。
观察者模式(Observer)
是发布者和观察者直接交流,一对多。多个观察者依赖一个发布者的数据,从而不会让更多对象控制同一份数据,这样能够得到更干净的设计。代表:MVC
比如天气情况变更通知预定,发布者会在天气变更的时候向观察者名单发送消息;观察者小明告诉发布者需要知道天气变更消息,那么发布者就会将小明加入观察者名单中,然后发布者会在天气发生变更时将消息主动直接传递给观察者名单的所有人;如果小明不想再知道这些消息,则发布者就会将小明从观察者名单中剔除。
发布订阅模式(Subscribe/Publish)
订阅者和发布者不是直接交流,而是通告调度中心(中介),多对多。代表:activeMq
比如天气情况变更通知预定,发布者会在天气变更的时候向调度中心发送消息,然后由调度中心告诉所有订阅了该天气变更的订阅者;订阅者也只需告诉调度中心自己是否需要订阅。
总结
两者的最大的区别在于调度方式的不同。观察者模式中观察者和发布者之间存在依赖,而发布订阅模式没有。