观察者模式

观察者模式

// 观察都模式必须要基于发布订阅模式

// 被观察者 
class Subject {
  constructor(name) {
    this.name = name
    this.state = '开心'
    this.observers = [] // 存放所有的观察者
  }
  attach(o) { // 保存观察者实例(订阅)
    this.observers.push(o)
  }
  setState(newState) { // 状态发生改变时通知观察者(发布)
    if (newState !== this.state) {
      this.state = newState
      this.observers.forEach(o => o.update(this))
    }
  }
}

// 观察者
class Observer {
  constructor(name) {
    this.name = name
  }
  update(s) { // 获取的是被观察者的实例
    console.log(`${this.name} 知道 ${s.name} 状态发生了变化`)
  }
}

let s = new Subject('小宝宝')


let o1 = new Observer('爸爸')
let o2 = new Observer('妈妈')

s.attach(o1)
s.attach(o2)

s.setState('不开心')
  • 观察者模式必须要有一个被观察者和N个观察者
  • 观察者模式是基于发布订阅
posted @ 2022-04-04 17:42  霸哥yyds  阅读(35)  评论(0)    收藏  举报