简单实现一个观察者模式,代码如下:
// 被观察者
class Subject {
constructor(name, state) {
this.name = name
this.state = state
this.observers = []
}
// 被观察者提供一个接受观察者的方法
attach(observer) {
// 将观察者收集在一起
this.observers.push(observer)
}
setState(state) { // 更新被观察者的状态,同时通知所有的观察者
this.state = state
this.observers.forEach(item => item.updated(this.name, state))
}
}
// 观察者
class Observer {
constructor(name) {
this.name = name
}
updated(obsever, state) { // 通知所有的观察者,被观察者的状态发生变化了
console.log(`${this.name}说:${obsever}${state}`)
}
}
let sub = new Subject('son', 'legao玩的真开心')
let o1 = new Observer('Dad')
let o2 = new Observer('Mam')
sub.attach(o1)
sub.attach(o2)
sub.setState('肚子饿了')