实现发布订阅模式

2020-03-01  本文已影响0人  葶寳寳

发布/订阅(PUB/SUB)是一种消息模式,它有两个参与者:发布者和订阅者。发布者向某个信道(channel)发布一条消息,订阅者绑定这个信道,当有消息发布至信道时就会接受到一个通知。最重要的一点是,发布者和订阅者是完全解耦的,彼此并不知道对方的存在。两者仅仅共享一个信道的名称。

发布者和订阅者的解耦可以让你的运用易于拓展,而不必引入额外的交叉依赖的耦合,从而提高了运用的可维护性,添加额外功能也非常容易。

代码实现如下:

const event = {
  subscribe: function(name, fn) {
    const list = this.events[name] || [];
    list.push(fn);
    this.events[name] = list;
    
    return this;
  },
  
  publish: function(name, data) {
    const list = this.events[name] || [];
    
    list.forEach(fn => {
      fn(data);
    })
  },
  
  unsubscribe: function(name, fn) {
    if(!name && !fn) {
      this.events = {};
      
      return this;
    }
    
    if(!fn) {
      delete this.events[name];
      
      return this;
    }
    
    const list = this.events[name];
    
    if(list) {
      this.events = list.filter(item => item !== fn)
    }
  
    return this;
  },
  
  attach: function(obj) {
    obj.events = {};
    obj.on = this.on;
    obj.emit = this.emit;
  }
}
上一篇下一篇

猜你喜欢

热点阅读