观察者模式与发布/订阅者模式区别

观察者模式

观察者模式: 一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。

例如: 儿子告诉老妈:“一会儿饭做好,我回来吃饭”
上面问题概述起来,适用观察者模式有几个要素:被观察者(老妈)、观察者(儿子)、事件(老妈是否做好饭)和由被观察者维护的观察者列表(老妈知道要回家吃饭的是谁)。
观察者模式

  1. 在观察者模式中,观察者是知道Subject的,Subject一直保持对观察者进行记录。
  2. 观察者模式大多数时候是同步的,比如当事件触发,Subject就会去调用观察者的方法。

发布/订阅者模式

发布-订阅者模式: 相比在观察者模式中,发布者和订阅者之间多了一个发布通道;一方面从发布者接收事件,另一方面向订阅者发布事件;订阅者需要从事件通道订阅事件,解决了主体对象与观察者之间功能的耦合, 以此避免发布者和订阅者之间产生依赖关系。

例如: 微信公众号
订阅者: 只需要订阅(关注)微信公众号
发布者(公众号): 发布新文章的时候,推送给所有的订阅者

  • 发布-订阅者模式的优势:

  1. 解耦合
  2. 订阅者不用每次都去查看公众号是否有新的文章
  3. 发布者不需要谁订阅了它,只要给订阅者推送即可
    发布/订阅者模式

发布/订阅者模式与观察者模式的区别:

两种模式对比

总结:

  • 在观察者模式中,观察者是知道Subject的,Subject一直保持对观察者进行记录。然而,在发布订阅模式中,发布者和订阅者不知道对方的存在。它们只有通过消息代理进行通信。
  • 在发布订阅模式中,组件是松散耦合的,正好和观察者模式相反。
  • 观察者模式大多数时候是同步的,比如当事件触发,Subject就会去调用观察者的方法。而发布-订阅模式大多数时候是异步的(使用消息队列)。
  • 观察者模式需要在单个应用程序地址空间中实现,而发布-订阅更像交叉应用模式。

猜你喜欢

转载自blog.csdn.net/Calla_Lj/article/details/86707136