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响应式系统

事件总线

相关推荐
极梦网络无忧1 分钟前
基于 Vite + Vue3 的组件自动注册功能
前端·javascript·vue.js
cyforkk1 分钟前
Java 并发编程教科书级范例:深入解析 computeIfAbsent 与方法引用
java·开发语言
一杯美式 no sugar5 分钟前
C++入门基础
开发语言·c++
大鹏说大话6 分钟前
AI 辅助编程革命:如何利用 GitHub Copilot 等工具重塑开发效率
开发语言
rit84324997 分钟前
有限元法求转子临界转速的MATLAB实现
开发语言·matlab
echome8887 分钟前
Python 异步编程实战:asyncio 核心概念与最佳实践
开发语言·网络·python
剑海风云9 分钟前
JDK 26之安全增强
java·开发语言·安全·jdk26
左左右右左右摇晃11 分钟前
Java并发——多线程
java·开发语言·jvm
AMoon丶12 分钟前
Golang--内存管理
开发语言·后端·算法·缓存·golang·os
阿里嘎多学长13 分钟前
2026-03-22 GitHub 热点项目精选
开发语言·程序员·github·代码托管