//被观察者 class Subject { constructor(name) { this.name = name; this.observers = []; this.status = 'happy'; } //被观察者提供一个方法 接受观察者 attach(observer) { this.observers.push(observer); } setStatus(newStatus) { this.status = newStatus; this.observers.forEach(o=>o.update(newStatus)); } } //观察者 class Observer { constructor(name){ this.name = name; } update(newStatus){ // 用来通知所有的观察者状态更新了 console.log(this.name+'说:孩子'+newStatus); } } let sub = new Subject('孩子'); let o1 =new Observer('父亲'); let o2 =new Observer('母亲'); let o3 =new Observer('爷爷'); let o4 =new Observer('奶奶'); sub.attach(o1); sub.attach(o2); sub.setStatus('bad')
输出:
父亲说:孩子bad
母亲说:孩子bad
先声明两个类 观察者类 和 被观察者类
新建构造函数 初始化 数据 观察者要提供一个数组 存放被观察者
在观察者中 声明 两个 方法
attach 方法是将 观察者push 到数组中
seTStatus 方法 是修改 状态 更新状态
观察者方法
通知状态更新