前端设计模式之发布订阅模式

411 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

定义:

发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知

与观察者模式区别:

观察者模式中观察者和目标直接进行交互,而发布订阅模式中统一由调度中心进行处理,订阅者和发布者互不干扰。这样一方面实现了解耦,还有就是可以实现更细粒度的一些控制

实现:

  1. 首先要确定发布者
  2. 然后给发布者添加一个缓存列表,用于存放回调函数来通知订阅者
  3. 最后就是发布消息,发布者遍历这个缓存列表,依次触发里面存放的订阅者回调函数

优缺点:

优点:

  1. 观察者和被观察者是抽象耦合的
  2. 异步编程中代替传入回调函数的方式
  3. 建立了一套触发机制

缺点:

  1. 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间
  2. 如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃
  3. 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化

前端应用:

  1. addEventListener事件监听;
  2. Vue框架的数据双向绑定(数据劫持 + 发布订阅模式);
  3. NodeJS中的EventEmitter模块