观察者模式特点
将观察者添加到被观察者内部,
当被观察者状态改变是依次通知观察者,并触发观察者的方法
实现
小宝宝饿了要吃奶,通知爸爸妈妈
class Subject {
constructor(name) {
this.name = name; // 宝宝名字
this.state = '不饿'; // 宝宝状态
this.observes = [];// 观察宝宝的人的集合
}
on(o) {
this.observes.push(o);
}
setState(newState) {
// 被观察者状态改变的是通知观察者
this.state = newState;
this.observes.forEach(o => o.action(this.name, newState))
}
}
class Observe {
constructor(name) {
this.name = name;
}
action(name, newState) {
// 观察对象变化的时候观察者执行的方法
console.log(name + newState + this.name + '冲奶粉');
}
}
class Observe2 {
constructor(name) {
this.name = name;
}
action(name, newState) {
// 观察对象变化的时候观察者执行的方法
console.log(name + newState + this.name + '喂奶');
}
}
let baby = new Subject('久久');
let o1 = new Observe('爸爸');
let o2 = new Observe2('妈妈');
baby.on(o1);
baby.on(o2);
baby.setState('饿了');
执行结果