js观察者模式

它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时,它的所有观察者都会收到通知并自动更新。

js 复制代码
// 定义主题类

class Subject {

  constructor() {

    this.observers = [];

  }

  // 添加观察者方法

  addObserver(observer) {

    this.observers.push(observer);

  }

  // 移除观察者方法

  removeObserver(observer) {

    this.observers = this.observers.filter(o => o !== observer);

  }

  // 通知观察者方法

  notifyObservers() {

    this.observers.forEach(observer => observer.update());

  }

  // 主题状态改变方法

  setState(state) {

    this.state = state;

    this.notifyObservers();

  }

}

  

// 定义观察者接口

class Observer {

  constructor() {

    if (this.constructor === Observer) {

      throw new Error('不能实例化抽象类');

    }

  }

  // 定义更新方法

  update() {

    throw new Error('必须实现 update 方法');

  }

}

  

// 具体观察者类 A

class ConcreteObserverA extends Observer {

  constructor() {

    super();

  }

  // 实现更新方法

  update() {

    console.log('具体观察者 A 收到通知并更新');

  }

}

  

// 具体观察者类 B

class ConcreteObserverB extends Observer {

  constructor() {

    super();

  }

  // 实现更新方法

  update() {

    console.log('具体观察者 B 收到通知并更新');

  }

}

  

// 使用观察者模式

let subject = new Subject();

let observerA = new ConcreteObserverA();

let observerB = new ConcreteObserverB();

  

subject.addObserver(observerA);

subject.addObserver(observerB);

  

subject.setState('状态已改变');

应用

vue响应式系统

事件总线

相关推荐
摘星编程5 分钟前
React Native for OpenHarmony 实战:I18n 国际化详解
javascript·react native·react.js
—Qeyser11 分钟前
Flutter AppBar 导航栏组件完全指南
前端·javascript·flutter
恃宠而骄的佩奇12 分钟前
蚁剑 php一句话木马简单免杀(编码)绕过360,火绒
开发语言·web安全·php·免杀·一句话木马·火绒安全
雾岛听蓝17 分钟前
理解C++多态
开发语言·c++
摘星编程21 分钟前
React Native for OpenHarmony 实战:Localization 本地化详解
javascript·react native·react.js
济61722 分钟前
c语言基础(1)--数据类型说明
c语言·开发语言
小屁猪qAq22 分钟前
设计模式的基石
开发语言·c++·设计模式
柠檬丶抒情25 分钟前
Rust no_std 裸机移植:9 条避坑与实战手册
开发语言·mongodb·rust
Amumu1213834 分钟前
React扩展(一)
前端·javascript·react.js
FAFU_kyp1 小时前
Rust 模式匹配:match 与 if let 详解
开发语言·后端·rust