发布订阅者模式和观察者模式的区别
1.什么是观察者模式
定义:当对象之间存在一对多的依赖关系时,其中一个对象的状态发生改变,所有依赖它的对象都会收到通知,这就是观察者模式。
在观察者模式中,只有两种主体:目标对象 (`Object`) 和 观察者 (`Observer`)。
目标对象 `Subject`:
- 维护观察者列表 `observerList`
- 定义添加观察者的方法
- 当自身发生变化后,通过调用自己的 `notify` 方法依次通知每个观察者执行 `update` 方法
观察者 Observer
需要实现 update
方法,供目标对象调用。update
方法中可以执行自定义的业务逻辑 ———— 弟子们需要定义接收任务通知后的方法,例如去抢任务或任务不适合,继续等待下一个任务
2.什么是发布订阅模式
定义:基于一个事件(主题)通道,希望接收通知的对象 Subscriber
通过自定义事件订阅主题,被激活事件的对象 Publisher
通过发布主题事件的方式通知各个订阅该主题的 Subscriber
对象。
因此发布订阅模式与观察者模式相比,发布订阅模式中有三个角色,发布者 Publisher
,事件调度中心 Event Channel
,订阅者 Subscriber
。
目标对象 Subject
:
任务发布者 —— Publisher
中介功能 —— Event Channel
- 维护任务类型,以及每种任务下的订阅情况
- 给订阅者提供订阅功能 ——
subscribe
功能 - 当宗门发布任务后,中介会给所有的订阅者发布任务 ——
publish
功能
任务接受者 —— Subscriber
观察者 Observer
需要实现 update
方法,供目标对象调用。update
方法中可以执行自定义的业务逻辑
发布者和订阅者不知道对方的存在。需要第三方中介,将订阅者和发布者串联起来,利用中介过滤和分配所有输入的消息。也就是说,发布-订阅模式用来处理不同系统组件的信息交流,即使这些组件不知道对方的存在。
例子:
平台提供了消息订阅功能,如果你选择订阅,平台更新电视剧后,会第一时间发消息通知你,订阅后,你就可以愉快的追剧了。
上面案例中,电视剧就是发布者 Publisher
,追剧人就是订阅者 Subscribe
,平台则承担了事件通道 Event Channel
功能。
总结:
可参考
https://juejin.cn/post/7055441354054172709#heading-4
写的很好