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

观察者模式(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. 观察者模式需要在单个应用程序地址空间中实现。另一方面,发布者/订阅者模式更像是跨应用程序模式。

你可能感兴趣的:(观察者模式和发布订阅模式的区别)