1、创建一个主题(有依赖管理器)dep
创建Subject主题类,dep收集依赖(Observer观察者)
class Subject {private dep: Array<Observer> = [];private state: number = 0;getState(): number {return this.state}setState(state: number) {this.state = statethis.notifyDep()}addDep(observer: Observer) {this.dep.push(observer)}notifyDep() {for (let i = 0; i < this.dep.length; i++) {this.dep[i].update()}}}
2、创建Observer观察者
创建的时候收集了依赖
当改变主题中setState的时候通知了依赖并触发类observer实例中的update
class Observer {constructor(subject: Subject) {subject.addDep(this)}update() {console.log('通知了')}}const subject = new Subject()const ob1 = new Observer(subject)const ob2 = new Observer(subject)subject.setState(2) //两个 ob1 ob2 都更新了
总结
第一步:创建一个主题/收集依赖的一个类(监听了什么东西(what)setState)
第二步:这个主题/收集依赖的一个类(如何去触发发生改变(how)setState 触发依赖通知)
第三步:什么时候去收集这个依赖
第四步:什么时候去通知这个依赖
第三步和第四步可根据业务来
