设计模式-观察者模式

介绍

例子:监控

我们坐在教室里就是 被观察者
监控后面的老师就是 观察者
当观察者发现被观察者出发某些条件,观察者就会触发事件。
比如被观察者在教室玩手机,观察者就会触发 请家长 技能

  • 观察者:
    - 名字
    - 技能
  • 被观察者
    • 状态
    • 当前观察他的人,观察他的人可能不止一个 []
    • 修改当前状态
    • 添加观察者
    • 移除观察者
// 观察者模式
/*

*/

// 观察者 拥有名字以及技能
class Observer {
  // 当前观察者的名字以及技能
  constructor(name, fn) {
    this.name = name
    this.fn = fn
  }
}

// 被观察者
class Subject {

  constructor() {
    this.state = '学习'       //当前状态
    this.observers = []       //当前的观察者
  }

  setState (state) {            //修改当前的state
    this.state = state
    this.observers.forEach(item => {
      item.fn(this.state)
    })
  }
  addObserver (obs) {           //添加当前对象的观察者
    this.observers = this.observers.filter(item => item !== obs)
    this.observers.push(obs)
  }
  removeObserver (obs) {        //移除当前观察者
    this.observers = this.observers.filter(item => item !== obs)
  }
}

// 创建两个观察者
const bzr = new Observer('班主任', (reason) => { console.log(`因为${reason},触发请家长`) })
const xz = new Observer('校长', (reason) => { console.log(`因为${reason},触发找班主任`) })


// 创建一个被观察者
const zs = new Subject()
zs.addObserver(bzr)
zs.addObserver(xz)
zs.setState('玩手机')

posted @ 2023-03-14 10:44  含若飞  阅读(20)  评论(0编辑  收藏  举报