- 发布&订阅
- 一对多
举例一:
//主题,保存状态,状态变化后触发所有观察者对象
class Subject {
constructor() {
this.state = 0;
this.observers = [];
}
getState() {
return this.state;
}
setState(state) {
this.state = state;
this.notifyAllObservers();
}
notifyAllObservers() {
this.observers.forEach(observer => {
observer.update();
})
}
attach(observer) {
this.observers.push(observer);
}
}
//观察者
class Observer {
constructor(name, subject) {
this.name = name;
this.subject = subject;
//塞入当前的观察者
this.subject.attach(this);
}
update() {
console.log(`${this.name} ==== ${this.subject.getState()}`);
}
}
let s = new Subject();
let o1 = new Observer('o1', s);
let o2 = new Observer('o2', s);
let o3 = new Observer('o3', s);
s.setState(66);
s.setState(88);
// o1 ==== 66
// o2 ==== 66
// o3 ==== 66
// o1 ==== 88
// o2 ==== 88
// o3 ==== 88
其它例子:
- 网页事件绑定,页面中的事件监听机制大部分都用的观察者模式。
- Promise
- jQuery callbacks
- nodejs自定义事件
来源:CSDN
作者:HappyChen666
链接:https://blog.csdn.net/u013565133/article/details/103598075