likes
comments
collection
share

发布订阅模式

作者站长头像
站长
· 阅读数 27

发布订阅要素

  • 缓存队列,存放订阅者信息
  • 具有增加、删除订阅的能力
  • 状态改变时通知所有订阅者执行监听

发布订阅存在调度中心,状态发生改变时,发布订阅无须主动通知模拟实现

class PubSub {
  constructor() {
    this._events = {};
  }

  // 注册
  subScribe(event, cb) {
    if (this._events[event]) {
      // 如果当前event存在,所以我们只需要往后添加当前次监听操作
      this._events[event].push(cb);
    } else {
      // 之前没有订阅过此事件
      this._events[event] = [cb];
    }
  }

  // 发布
  publish(event, ...args) {
    const items = this._events[event];
    if (items && items.length) {
      items.forEach(function (cb) {
        cb.call(this, ...args);
      });
    }
  }
}

let ps = new PubSub();
ps.subScribe("event1", () => {
  console.log("event1 do");
});
ps.subScribe("event1", () => {
    console.log("event1 do-----");
  });

ps.publish("event1");
ps.publish("event1");