观察者模式

本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-12-15

观察者模式(Observer):又被称作发布-订阅者模式或消息机制,比如当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。

如何解决:使用面向对象技术,可以将这种依赖关系弱化。

function Observer () {
  this.message = {};
}

Observer.prototype = {
  constructor: Observer,

  subscribe(type, fn) {
    (this.message[type]) || (this.message[type] = []).push(fn);
  },
  fire(type, ...args) {
    if (!this.message[type]) {
      return;
    }
    for (let i = 0, len = this.message[type].length; i < len; i++) {
      this.message[type][i].apply(this, args);
    }
  },
  remove(type, fn) {
    if (this.message[type]) {
      for (let i = 0, len = this.message[type].length; i < len; i++) {
        if (this.message[type][i] === fn) {
          this.message[type].splice(i, 1);
        }
      }
    }
  }
}

var o = new Observer();
o.subscribe('test-event', function(...args) {
  console.log('data', args);
})

o.fire('test-event', { data: 123});