JavaScript设计模式

发布/订阅模式

2020-11-10  本文已影响0人  浅忆_0810

1. 介绍

我们假定,存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(publish)一个信号,其他任务可以向信号中心"订阅"(subscribe)这个信号,从而知道什么时候自己可以执行,这就叫做"发布/订阅模式"(publish-subscribe pattern

// 事件触发器
class EventEmitter {
  constructor() {
    // { 'click': [fn1, fn2], 'change': [fn] }
    this.subs = Object.create(null);
  }

  // 订阅通知(注册事件)
  $on(eventType, handler) {
    this.subs[eventType] = this.subs[eventType] || [];
    this.subs[eventType].push(handler);
  }

  // 发布通知(触发事件)
  $emit(eventType) {
    if (this.subs[eventType]) {
      this.subs[eventType].forEach(handler => {
        handler();
      });
    }
  }
}

// 测试
let em = new EventEmitter();

// 注册事件
em.$on('click', () => {
  console.log('click1');
})
em.$on('click', () => {
  console.log('click2');
})

// 触发事件
em.$emit('click');
上一篇 下一篇

猜你喜欢

热点阅读