观察者模式(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的订阅者。当然也有可能是订阅者自己过来拉取,看具体实现。 - 完全解耦的
总结
简而言之,这两种模式之间的主要区别可以如下所示:
- 在Observer模式中,Observers知道Subject,同时Subject还保留了Observers的记录。然而,在发布者/订阅者中,发布者和订阅者不需要彼此了解。他们只是在消息队列或代理的帮助下进行通信。
- 在Publisher / Subscriber模式中,组件是松散耦合的,而不是Observer模式。
- 观察者模式主要以同步方式实现,即当某些事件发生时,Subject调用其所有观察者的适当方法。发布者/订阅者在大多情况下是异步方式(使用消息队列)。
- 观察者模式需要在单个应用程序地址空间中实现。另一方面,发布者/订阅者模式更像是跨应用程序模式。
网友评论