回到理论中,监听的依赖是什么,什么时候触发这个依赖?
**

1、创建一个主题(有依赖管理器)dep

创建Subject主题类,dep收集依赖(Observer观察者)

  1. class Subject {
  2. private dep: Array<Observer> = [];
  3. private state: number = 0;
  4. getState(): number {
  5. return this.state
  6. }
  7. setState(state: number) {
  8. this.state = state
  9. this.notifyDep()
  10. }
  11. addDep(observer: Observer) {
  12. this.dep.push(observer)
  13. }
  14. notifyDep() {
  15. for (let i = 0; i < this.dep.length; i++) {
  16. this.dep[i].update()
  17. }
  18. }
  19. }

2、创建Observer观察者

创建的时候收集了依赖
当改变主题中setState的时候通知了依赖并触发类observer实例中的update

  1. class Observer {
  2. constructor(subject: Subject) {
  3. subject.addDep(this)
  4. }
  5. update() {
  6. console.log('通知了')
  7. }
  8. }
  9. const subject = new Subject()
  10. const ob1 = new Observer(subject)
  11. const ob2 = new Observer(subject)
  12. subject.setState(2) //两个 ob1 ob2 都更新了

总结

第一步:创建一个主题/收集依赖的一个类(监听了什么东西(what)setState)
第二步:这个主题/收集依赖的一个类(如何去触发发生改变(how)setState 触发依赖通知)

第三步:什么时候去收集这个依赖
第四步:什么时候去通知这个依赖

第三步和第四步可根据业务来