观察者模式简易实现

16 阅读1分钟

// 观察者模式
class Subject{
  constructor(){
    this.observers = []
  }

  // 注册观察者
  addObserver(observer) {
    if(typeof observer.update === 'function') {
      this.observers.push(observer)
    }
  }

  // 通知所有观察者
  notify(...args) {
    this.observers.forEach(item=>item.update(...args))
  }

  // 移除指定观察者
  removeObserver(observer) {
    this.observers= this.observers.filter(item=>item!==observer)
  }
}

// 创建主题(被观察者)
const subject = new Subject();
/* ====== 使用示例 ====== */
// 定义一个具体观察者
const observer1 = {
  update: (data) => console.log('Observer1 received:', data)
};

const observer2 = {
  update: (data) => console.log('Observer2 received:', data)
};

// 注册观察者
subject.addObserver(observer1);
subject.addObserver(observer2);

// 通知观察者
subject.notify('Hello Observers!'); 
// 输出:
// Observer1 received: Hello Observers!
// Observer2 received: Hello Observers!
// 移除一个观察者
subject.removeObserver(observer1);
subject.notify('Second message');
// 输出:
// Observer2 received: Second message