观察者模式一

57 阅读1分钟

示例,Subject主题 ,Observer观察者。所有的观察者都观察state,state改变通知所有的观察者。

class Subject {
  private state: number = 0;
  private observers: Array<Observer> = [];
  getState() {
    return this.state;
  }

  setState(state: number) {
    this.state = state;
    this.notify();
  }

  attach(observer: Observer) {
    this.observers.push(observer);
  }

  private notify() {
    this.observers.forEach((observer) => {
      observer.update(this.state);
    });
  }
}

class Observer {
  private name: string;
  constructor(name: string) {
    this.name = name;
  }
  update(state: number) {
    console.log("update: " + this.name + "  " + state);
  }
}

const subject = new Subject();

const observer1 = new Observer("张三");
const observer2 = new Observer("李四");

subject.attach(observer1);
subject.attach(observer2);
subject.setState(1);
setTimeout(() => {
  subject.setState(2);
}, 3000);