观察者模式

发布订阅模式(Publish-Subscribe Pattern),也称为观察者模式,是一种常用的设计模式,用于对象之间的消息传递。在这个模式中,订阅者(Observer)注册到发布者(Subject),当发布者状态发生变化时,通知所有订阅者。

下面是一个 JavaScript 实现的发布订阅模式:

js 复制代码
class PubSub {
  constructor() {
    this.subscribers = {};
  }

  // 订阅事件
  subscribe(event, callback) {
    if (!this.subscribers[event]) {
      this.subscribers[event] = [];
    }
    this.subscribers[event].push(callback);
  }

  // 取消订阅
  unsubscribe(event, callback) {
    if (!this.subscribers[event]) return;

    this.subscribers[event] = this.subscribers[event].filter(subscriber => subscriber !== callback);
  }

  // 发布事件
  publish(event, data) {
    if (!this.subscribers[event]) return;

    this.subscribers[event].forEach(callback => callback(data));
  }
}

// 使用示例
const pubSub = new PubSub();

function subscriber1(data) {
  console.log(`Subscriber 1 received data: ${data}`);
}

function subscriber2(data) {
  console.log(`Subscriber 2 received data: ${data}`);
}

// 订阅事件
pubSub.subscribe('event1', subscriber1);
pubSub.subscribe('event1', subscriber2);

// 发布事件
pubSub.publish('event1', 'Hello World!');
// 输出:
// Subscriber 1 received data: Hello World!
// Subscriber 2 received data: Hello World!

// 取消订阅
pubSub.unsubscribe('event1', subscriber2);

// 发布事件
pubSub.publish('event1', 'Hello again!');
// 输出:
// Subscriber 1 received data: Hello again!
相关推荐
YIAN1 小时前
LangChain JS 工具调用实战:基于 DeepSeek-V4-Flash 实现本地文件读取 AI 代码助手(完整可运行源码)
javascript·langchain·前端框架
尼斯湖皮皮怪1 小时前
iceCoder 记忆系统深度分析
前端·javascript
爸爸6191 小时前
07 ArkTS 基础类型与接口定义:从 TypeScript 到鸿蒙的类型升级
javascript·华为·typescript·harmonyos·鸿蒙系统
默_笙2 小时前
🌏 MCP 是 AI 界的 USB-C:一个协议让所有模型都能用上所有工具
前端·javascript
月光刺眼4 小时前
用LangChain 打造第一个 Agent:LLM 大脑与 Tool 手脚的完整闭环
javascript·人工智能·全栈
西西学代码4 小时前
Flutter---底部导航栏(2)
开发语言·javascript·flutter
阿奇__5 小时前
uniapp微信小程序图片上传含回显组件(拍照,相册)
前端·javascript·vue.js
浮江雾6 小时前
Flutter第二节----Dart中的常量与变量
开发语言·前端·javascript·flutter·入门
大家的林语冰6 小时前
Rust 再次打败 Go,Astro 7 首发,什么叫“万物皆可锈化“!
前端·javascript·性能优化
用户938515635077 小时前
从零打造你的第一个智能体(Agent):*手写一个能自主建项目的Mini Cursor (三)
javascript·人工智能·后端