观察者模式和发布订阅模式的区别

观察者模式(Observer Pattern)

  • 定义了对象之间的一对多依赖,当一个对象改变时,它的所有依赖都会收到通知(notify)并自动更新
  • 是观察者(Observer)和被观察者(Subject 或Observable)之间的通讯。
  • Subject维护一套Observer的集合,当Subject 改变时,通知Observer
  • 观察者和被观察者,是松耦合(loosely coupled)的关系
  • 别名 :“订阅-发布模式”


    观察者模式

发布者-订阅者模式 (Pub-Sub Pattern)

  • 发布者不直接通知订阅者,而是通过第三者,也就是在消息队列里面,我们常说的经纪人Broker
  • 发布者只需告诉Broker,我要发的消息,topic是AAA;
    订阅者只需告诉Broker,我要订阅topic是AAA的消息;
    于是,当Broker收到发布者发过来消息,并且topic是AAA时,就会把消息推送给订阅了topic是AAA的订阅者。当然也有可能是订阅者自己过来拉取,看具体实现。

  • 完全解耦的
发布者-订阅者

总结

简而言之,这两种模式之间的主要区别可以如下所示:

  1. 在Observer模式中,Observers知道Subject,同时Subject还保留了Observers的记录。然而,在发布者/订阅者中,发布者和订阅者不需要彼此了解。他们只是在消息队列或代理的帮助下进行通信。
  2. 在Publisher / Subscriber模式中,组件是松散耦合的,而不是Observer模式。
  3. 观察者模式主要以同步方式实现,即当某些事件发生时,Subject调用其所有观察者的适当方法。发布者/订阅者在大多情况下是异步方式(使用消息队列)。
  4. 观察者模式需要在单个应用程序地址空间中实现。另一方面,发布者/订阅者模式更像是跨应用程序模式。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容