Skip to content

观察者模式

观察者模式指的是一个对象(Subject)维持一系列依赖于它的对象(Observer),当有关状态发生变更时 Subject 对象则通知一系列 Observer 对象进行更新。

观察者模式,其实就是为了实现松耦合(loosely coupled)。

js
class Subject {
  constructor() {
    this.observers = [];
  }

  add(observer) {
    this.observers.push(observer);
  }

  notify() {
    this.observers.forEach(ob => ob.update());
  }

  delete(ob) {
    for (let i = 0; i < this.observers.length; i++) {
      if (this.observers[i] === ob) {
        this.observers.splice(i, 1);
      }
    }
  }
}

class Observer {
  constructor(name) {
    this.name = name;
  }
  update() {
    console.log(`[observer] name is`, this.name);
  }
}

const sub = new Subject();
const ob1 = new Observer('ob1');
const ob2 = new Observer('ob2');

sub.add(ob1);
sub.add(ob2);
sub.notify(); //[observer] name is ob1; [observer] name is ob2

sub.delete(ob1);
sub.notify(); //[observer] name is ob2