观察者模式
顾名思义,有观察者 被观察者,这两是有关系的
被观察者状态改变时,触发观察者的 动作
// 被观察者
function Observer(){
this.state = ‘ 默认状态 ’;
this.arr = [];// 用来存储所有的观察者
}
// 知道谁在 观察自己
Observer.prototype.attch = function(s){
// 存储主动观察者
this.arr.push(s);
}
// 被观察者状态
Observer.prototype.setState = function(newState){
this.state = newState;
// 只要状态改变就通知所有的观察者,孩子饿了就会朝着爸妈哭
this.arr.forEach(s=>s.update())
}
// 定义观察者
/**
* name: 观察者
* target: 被观察者
**/
function Subject(name,target){
this.name = name;
this.target = target;
}
// 得到状态后的反应
Subject.prototype.update = function(newState){
console.log(this.name + ‘ 观察到状态 ’ + newState);
}
let o = new Observer();
let s1 = new Subject(‘ 父亲 ’,o);
let s2 = new Subject(‘ 母亲 ’,o);
o.attch(s1);
o.attch(s2);
o.setState(‘ 饿了 ’);