JavaScript常用设计模式--观察者模式

72 阅读1分钟

观察者模式(Observer Pattern)定义一个对象与其他对象之间的一种依赖关系,当对象发生某种变化的时候,依赖它的其他对象都会得到更新。

  1. 一个对象和另外一个对象关联在一起;
  2. 惰性执行:并不是立即执行,事件执行之后才执行
  3. 一对多的关系:一个对象可以绑定多个事件

自定义事件绑定addEvent

自定义事件触发trigger

自定义事件移除removeEvent

let obj1 = {
    fn1() {
        console.log("fn1);
    }
}
let obj1 = {
    fn2() {
        console.log("fn2);
    }
}

// 管理事件的类
class MyEvent{
    constructor() {
        this.handles = {};
    }
    // 添加事件
    addEven(eventName, fn){
         // {maevent1: [fn1, fn2...], myevent2: [fn1, fn2...]}
         if (typeof this.handles[eventName] === 'undefined') {
             this.handles[eventName] = [];
         }
         this.handles[eventName].push(fn);
    }
    // 触发(根据事件名称触发,判断this.handles里是否有eventName)
    trigger(eventName) {
        if (!(eventName in this.handles)) {
            return;
        }
        this.handles[eventName].forEach(fn => {
            fn();
        });
    }
}

let eventObj = new MyEvent();
eventObj.addEvent("myevent", obj1.fn1);
eventObj.addEvent("myevent", obj2.fn2);

// eventObj.removeEvent("myevent", obj2.fn2);

setTimeout(() => {
    eventObj.trigger("myevent");
});