观察者模式

发布订阅模式(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!
相关推荐
沐森3 分钟前
使用rust打开node的libuv实现多线程调用三种模式
javascript·rust
C_心欲无痕4 分钟前
vue3 - shallowReadonly浅层只读响应式对象
前端·javascript·vue.js
_Kayo_5 分钟前
HTML 拖放API
前端·javascript·html
狗头大军之江苏分军6 分钟前
2026年了,前端到底算不算“夕阳行业”?
前端·javascript·后端
跟着珅聪学java13 分钟前
Vue 和 React 优缺点
前端·javascript·vue.js
风止何安啊35 分钟前
用 10 行代码就能当 “服务器老板”+“网络小偷”+“文件管家”?Node.js:别不信!
前端·javascript·node.js
m0_6113493143 分钟前
什么是副作用(Side Effects)
开发语言·前端·javascript
Aniugel1 小时前
前端服务端渲染 SSR
服务器·javascript
C_心欲无痕1 小时前
vue3 - shallowReactive浅层响应式对象(只对顶层属性)
前端·javascript·vue.js
AY呀1 小时前
新手必读:React组件从入门到精通,一篇文章搞定所有核心概念
前端·javascript·react.js