观察者模式
有观察者,也有被观察者,观察者需要放到被观察者中,被观察者的状态发生变化需要通知观察者
内部也是基于发布订阅模式 收集观察者 状态变化后要通知观察者
class Subject{
constructor(name){
this.name=name
this.state='开心的'
this.observers=[]
}
attach(o){
this.observers.push(o);
}
setState(newState){
this.state=newState;
this.observers.forEach(o=>o.updated(this))
}
}
class Observer{
constructor(name){
this.name=name
}
updated(baby) {
console.log('当前'+this.name+'被通知了','当前小宝宝的状态是'+baby.state)
}
}
let baby=new Subject('小宝宝')
let parent=new Observer('爸爸')
let mother=new Observer('妈妈')
baby.attach(parent)
baby.attach(mother)
baby.setState('被欺负了')
运行结果
当前爸爸被通知了 当前小宝宝的状态是被欺负了
当前妈妈被通知了 当前小宝宝的状态是被欺负了