观察者模式有两个主要的特点
1、观察者通过继承基类将自己注册到目标对象上(被观察者)
2、目标对象(被观察者)提供了维护观察者的一系列方法(增、删、遍历执行)
// 观察者模式
// 观察者
class Observer{
constructor(name){
this.name = name;
};
// 被观察状态改变执行函数
update (v) {
console.log('被观察者状态:' + v.state)
}
}
// 被观察者
class Subject {
constructor(name){
this.name = name;
this.state = '笑';
this.Observers = []; // 观察者列表
}
// 注册观察者
attach(fn){
this.Observers.push(fn);
}
// 改变被观察者状态
setState(v){
this.state = v;
this.Observers.forEach((fn)=>{
fn.update && fn.update(this)
})
}
}
let subject = new Subject('儿子');
let observer = new Observer('爸爸');
// 注册观察者
subject.attach(observer);
// 改变被观察者状态
subject.setState('哭');
这就是简单的观察者模式