观察者模式 vs 发布订阅模式--两者区别

观察者模式:所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。
发布订阅者模式:发布订阅模式里,发布者和订阅者,不是松耦合,而是完全解耦的。在发布订阅模式里,发布者,并不会直接通知订阅者,换句话说,发布者和订阅者,彼此互不相识

使用观察者模式,面向接口编程,实现松耦合。
观察者模式里面,changed()方法所在的实例对象,就是被观察者(Subject,或者叫Observable),它只需维护一套观察者(Observer)的集合,这些Observer实现相同的接口,Subject只需要知道,通知Observer时,需要调用哪个统一方法就好了:

发布订阅模式
大概很多人都和我一样,觉得发布订阅模式里的Publisher,就是观察者模式里的Subject,而Subscriber,就是Observer。Publisher变化时,就主动去通知Subscriber。
其实是:
发布者只需告诉Broker,我要发的消息,topic是AAA;
订阅者只需告诉Broker,我要订阅topic是AAA的消息;

总结

从表面上看:

观察者模式里,只有两个角色 —— 观察者 + 被观察者
而发布订阅模式里,却不仅仅只有发布者和订阅者两个角色,还有一个经常被我们忽略的 —— 经纪人Broker
往更深层次讲:

观察者和被观察者,是松耦合的关系
发布者和订阅者,则完全不存在耦合
从使用层面上讲:

观察者模式,多用于单个应用内部
发布订阅模式,则更多的是一种跨应用的模式(cross-application pattern),比如我们常用的消息中间件
详解:https://link.zhihu.com/?target=https%3A//hackernoon.com/observer-vs-pub-sub-pattern-50d3b27f838c

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