Skip to content

观察者模式

相比于代理模式, 观察者模式是多对一的关系

说明

  • 定义对象间的一对多依赖关系
  • 一个对象中的状态可以被其他对象监听, 当对象中的状态改变时, 会通知所有监听的对象
  • 应用场景: 事件处理、MVC模式

使用

ts
// 定义协议, 谁监听就要遵循这个规范
interface IObserver {
  nameChangeed: (newName: string) => void
}

class Person {
  private _name: string
  // 观察者数组
  observers: IObserver[]
  constructor(name: string, observers: IObserver[]) {
    this._name = name
    this.observers = observers
  }

  get name() {
    return this._name
  }

  set name(v) {
    this._name = v
    // 发生变化时遍历观察者数组, 给数组中的每一个观察者发送通知
    for(let i of this.observers) {
      i.nameChangeed(this._name)
    }
  }
}

class Test implements IObserver {
  nameChangeed(newName: string) {
    console.log(`监听到变化, name变为: ${newName}`)
  }
}

// 实例化传入观察者
let p = new Person('张三', [new Test()])
p.name = '李四'
// 监听到变化, name变为: 李四