观察者模式

发布订阅模式(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!
相关推荐
酷炫码神21 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
酷炫码神1 天前
Day 8|Vue3 响应式:告别手动操作 DOM,让数据驱动界面
javascript·vue.js·ecmascript
码林鼠1 天前
flutter状态管理入门教程-Riverpod
开发语言·javascript·flutter
互影派1 天前
分享:Cocos 互动影游一套代码双端分发(Web H5 + Windows/Steam)实践
javascript
Amos_Web1 天前
Markdonw语法
开发语言·前端·javascript
全栈项目管理程序猿1 天前
ArcGIS JS 基础教程(34):体元系列 - 等值面 VoxelIsosurface
前端·javascript
SensorFlow1 天前
离页埋点:sendBeacon 返回 true,为什么还不能算接收成功
javascript
兔子零10241 天前
架构师最危险的能力:用正确的技术,做出错误的架构决策
前端·javascript·后端
Bug收容所1 天前
Vue+js Day2
前端·javascript·vue.js
掘金酱1 天前
带着作品来,坐下来聊|掘金 X-lab · Coffee Talk 邀请你来见一面
前端·javascript·后端