或许以前认为订阅发布模式是观察者模式的一种别称,但是发展至今,概念已经有了不少区别。

观察者模式-发布订阅模式

观察者模式

在观察者模式中,只有两种主体: 观察者 (watcher)和被观察者(dep)也可以说发布者和订阅者。当对象间存在一对多关系时,则使用观察者模式。

优点

比如,当一个对象被修改时,会自动通知依赖它的对象。观察者模式属于行为型模式。降低了目标与观察者之间的耦合关系,目标与观察者之间建立了一套触发机制。

缺点

它的主要缺点如下。 目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。 当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。

1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。

2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。

3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。

应用场景

vue 双向绑定实现原理

发布订阅模式

有事件中心、发布者、订阅者三个成员;(事件中心的作用可以隔离发布者和订阅者,去除他们之间的依赖)

添加订阅、发布消息都是用的事件中心里面的方法,且数据存储和数据更新都是用的事件中心里面的方法;所以真正的观察者和发布者之间没有耦合。

https://segmentfault.com/a/1190000040205212

https://segmentfault.com/a/1190000020169229