发布订阅和观察者模式
发布订阅模式、观察者模式是不一样的。
发布订阅模式
或许你用过 eventemitter、node 的 events、Backbone 的 events 等等,这些都是前端早期,比较流行的数据流通信方式,即订阅发布模式。
从字面意思来看,我们需要首先订阅,发布者发布消息后才会收到发布的消息。不过我们还需要一个中间者来协调,从事件角度来说,这个中间者就是事件中心,协调发布者和订阅者直接的消息通信。
完成订阅发布整个流程需要三个角色:
发布者
事件中心
订阅者
以事件为例,简单流程如下:
发布者->事件中心<=>订阅者
订阅者需要向事件中心订阅指定的事件 -> 发布者向事件中心发布指定事件内容 -> 事件中心通知订阅者 -> 订阅者收到消息(可能是多个订阅者),到此完成了一次订阅发布的流程。
观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个目标对象,当这个目标对象的状态发生变化时,会通知所有观察者对象,使它们能够自动更新。
观察者模式我们可能比较熟悉的场景就是响应式数据,如 Vue 的响应式、Mbox 的响应式。
观察者模式有完成整个流程需要两个角色:
目标
观察者
简单流程如下:
目标<=>观察者
观察者观察目标(监听目标)-> 目标发生变化-> 目标主动通知观察者