简介
观察者模式指的是函数自动观察数据对象,一旦对象有变化,函数就会自动执行。而 JS 中最常见的观察者模式就是事件触发机制。
观察者模式:定义对象间一种一对多的依赖关系,当目标对象 Subject 的状态发生变化时,所有依赖它的对象 Observer 都会得到通知。
模式特征
- 一个目标对象 Subject,拥有方法:添加/删除/通知 Observer;
- 多个观察者对象 Observer,拥有方法:接收 Subject 状态变更通知并处理;
- 目标对象 Subject 状态变更时,通知所有 Observer;
class Subject { constructor() { // 观察者列表 this.observers = []; } // 添加 add(observer){ this.observers.push(observer); } // 删除 remove(observer){ let idx = this.observers.findIndex(item => item === observer); idx > -1 && this.observers.splice(idx, 1); } // 通知 notify(){ for(let observer of this.observers){ observer.update(); } } } class Observer { constructor(name){ this.name = name; } // 目标对象更新时触发的回调 update(){ console.log(`目标者通知我更新了,我是:${this.name}`); } } // 实例化目标者 let subject = new Subject(); // 实例化两个观察者 let obs1 = new Observer('前端开发者'); let obs2 = new Observer('后端开发者'); // 向目标者添加观察者 subject.add(obs1); subject.add(obs2); // 向目标者通知更新 subject.notify();