python--设计模式--15--行为型--观察者模式

it2024-03-27  63

1 观察者模式

[学习视频] P14观察者模式


2 发布订阅模式

大概很多人都和我一样,觉得发布订阅模式里的Publisher,就是观察者模式里的Subject,而Subscriber,就是Observer。Publisher变化时,就主动去通知Subscriber。

其实并不是。

在发布订阅模式里,发布者,并不会直接通知订阅者,换句话说,发布者和订阅者,彼此互不相识。

互不相识?那他们之间如何交流?

答案是,通过第三者,也就是在消息队列里面,我们常说的经纪人Broker。

发布者只需告诉Broker,我要发的消息,topic是AAA;

订阅者只需告诉Broker,我要订阅topic是AAA的消息;

于是,当Broker收到发布者发过来消息,并且topic是AAA时,就会把消息推送给订阅了topic是AAA的订阅者。当然也有可能是订阅者自己过来拉取,看具体实现。

也就是说,发布订阅模式里,发布者和订阅者,不是松耦合,而是完全解耦的。

放一张极简的图,给大家对比一下这两个模式的区别:

3 总结:观察者模式/发布订阅模式的区别

所属

观察者模式:23种软件设计模式之一发布订阅模式:一种消息传递模式。(除此之外还有点对点模式)

包含的对象

观察者模式:观察者(observer)和被观察者(subject)发布订阅模式:发布者(publisher)、订阅者(subscriber)和主题(topic/broker)

对象之间耦合程度

观察者模式:观察者和被观察者,是松耦合的关系发布订阅模式:发布者和订阅者,则完全不存在耦合

应用场景

观察者模式:多用于单个应用内部发布订阅模式:更多的是一种跨应用的模式(cross-application pattern),比如我们常用的消息中间件

[转载博客] 观察者模式 vs 发布订阅模式

最新回复(0)