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

         观察者模式和发布订阅模式有什么区别?大多数的回答都是: Publishers + Subscribers = Observer Pattern,24种基本的设计模式并无发布-订阅模式,发布订阅模式属于并发型模式;像典型的Mq;这两种类似单并不能够划等号。
咱们来从新来回顾一下这两种模式:

       Observer Pattern

         观察者模式定义了对象之间的 一对多依赖,这样一来,当一个对象改变状态时,它的全部依赖者都会收到通知并自动更新。 而观察者模式属于行为型模式,行为型模式关注的是对象之间的通信,观察者模式就是观察者和被观察者之间的通信。

观察者模式有一个别名叫“订阅—发布模式”。报纸你们都订过吧,当你订阅了一份报纸,天天都会有一份最新的报纸送到你手上,有多少人订阅报纸,报社就会发多少份报纸,这是典型的订阅—发布模式,报社和订报纸的客户就是上面文章开头所说的“一对多”的依赖关系。编程

 

       Pub-Sub  Pattern

         在“发布者-订阅者”模式中,称为发布者的消息发送者不会将消息编程为直接发送给称为订阅者的特定接收者。 这意味着发布者和订阅者不知道彼此的存在。存在第三个组件,称为代理或消息代理或事件总线,它由发布者和订阅者都知道,它过滤全部传入的消息并相应地分发它们。换句话说,pub-sub是用于在不一样系统组件之间传递消息的模式,而这些组件不知道关于彼此身份的任何信息。经纪人如何过滤全部消息?实际上,有几个消息过滤过程。最经常使用的方法有:基于主题和基于内容的。

        简而言之,这两种模式之间的主要区别能够以下所示:设计模式

 
  1. 在Observer模式中,Observers知道Subject,同时Subject还保留了Observers的记录。然而,在发布者/订阅者中,发布者和订阅者不须要彼此了解。他们只是在消息队列或代理的帮助下进行通讯。
  2. 在Publisher / Subscriber模式中,组件是松散耦合的,而不是Observer模式
  3. 观察者模式主要以同步方式实现,即当某些事件发生时,Subject调用其全部观察者的适当方法。发布者/订阅者在大多状况下是异步方式(使用消息队列)。
  4. 观察者模式须要在单个应用程序地址空间中实现。另外一方面,发布者/订阅者模式更像是跨应用程序模式。

         尽管这些模式之间存在差别,但有些人可能会说发布者 - 订阅者模式是观察者模式的变体,由于它们之间存在概念上的类似性,但并非同样的,欢迎拍砖! 并发

         参考文档:https://hackernoon.com/observer-vs-pub-sub-pattern-50d3b27f838c异步

相关文章
相关标签/搜索