/*Subject是被观察者,它的状态一旦发生变化,会通知所有的观察者*/
class Subject {
constructor(){
this.state = "初始state";
this.observers = [];//存放所有的观察者,一旦自身state改变,通知所有观察者
this.addobserver = function (observertmp) {
this.observers.push(observertmp);
}
this.changeState = function (data) {
console.log("state发生改变,通知所有的订阅者(观察者)");
for(let i=0;i<this.observers.length;i++){
this.observers[i].update(data);
}
this.state = data;
}
}
}
//Observer是观察者,一旦被观察者改变,观察者就会调用自身Update方法
class Observer{
constructor(){
this.update = function(data){
console.log("观察者:发现state发生变化,新state值为 "+data);
}
}
}
let observerOne = new Observer();
let observerTwo = new Observer();
let subject = new Subject();
subject.addobserver(observerOne);
subject.addobserver(observerTwo);
/*被观察者state发生改变*/
subject.changeState("new state");
一旦被观察者state发生改变,所有观察者会收到新state: