观察者模式:观察者observer直接订阅主题subject,当主题subject被激活时,会触发观察者里面的事件
// 主题
class Subject{
constructor(name){
this.name = name
this.state = 'happy'
this.observer = [] // 存放观察者
}
// 需要加入观察者
attach(user){
this.observer.push(user)
}
// 更新主题状态
setState(state) {
this.state = state
// 循环取出每个观察者调用更新方法
this.observer.forEach(i => {
// 触发观察者事件
i.update(this)
})
}
}
// 观察者
class Observer{
constructor(name){
this.name = name
}
// 观察主题状态的方法
update(Subject){
console.log(this.name+'观察了'+Subject.name+'的状态为'+Subject.state)
}
}
let son = new Subject('son')
let father = new Observer('father')
let mather = new Observer('mather')
son.attach(father)
son.attach(mather)
son.setState('sad')