观察者模式,各种大型框架都会用到。
里面结合发布订阅
/**
* 观察者模式
* 内部结合发布订阅
* */
// 观察者
class Observer {
constructor(name) {
this.name = name
}
// 观察者更新数据
updata(data) {
console.log(this.name + ':' + data)
}
}
// 被观察者
class Subject {
constructor() {
this._arr = [];
this.state = undefined;
}
// 注册观察者进入
attach(o) {
this._arr.push(o)
}
// 设置状态
setState(newState) {
this.state = newState
this._arr.forEach(o=>o.updata(this.state))
}
}
let o1 = new Observer('my')
let o2 = new Observer('wife')
let s = new Subject()
s.attach(o1)
s.attach(o2)
s.setState('宝宝哭了')
setTimeout(() => {
s.setState('一秒之后,,,宝宝现在不哭了')
}, 1000);
运行结果如下: