观察者模式

//被观察者
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 方法 是修改 状态 更新状态

 

 观察者方法

通知状态更新

 

 

posted @ 2019-08-07 23:04  1点  阅读(118)  评论(0编辑  收藏  举报