观察者模式特点:将订阅者直接存在了观察者中。
//被观察者
class Subject{
constructor(){
this.status ="想喝水";
this.subArr=[];
}
// 添加观察者
add(o){
this.subArr.push(o);
}
// 改变状态
setStatus(status){
this.status = status;
this.notify(status);
}
// 通知观察者
notify(status){
this.subArr.forEach(o=>{
o.update(status);
})
}
}
//观察者
class Observer{
constructor(name){
this.name = name;
}
update(status){
console.log(`${this.name}收到了宝宝${status}的状态`);
}
}
let observer1= new Observer("爸爸");
let observer2 = new Observer("妈妈");
let sub = new Subject();
sub.add(observer1);
sub.add(observer2);
sub.setStatus("睡醒了");
执行结果如下: