观察者模式

发布订阅模式(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!
相关推荐
Moment2 分钟前
为什么我在 NextJs 项目中使用 cookie 存储 token 而不是使用 localstorage
前端·javascript·react.js
天才熊猫君7 分钟前
uniapp小程序改网页笔记
javascript
江城开朗的豌豆14 分钟前
Git分支管理:从'独狼开发'到'团队协作'的进化之路
前端·javascript·面试
红衣信17 分钟前
电影项目开发中的编程要点与用户体验优化
前端·javascript·github
帅夫帅夫1 小时前
一文手撕call、apply、bind
前端·javascript·面试
锈儿海老师1 小时前
AST 工具大PK!Biome 的 GritQL 插件 vs. ast-grep,谁是你的菜?
前端·javascript·eslint
令狐寻欢1 小时前
JavaScript中 的 Object.defineProperty 和 defineProperties
javascript
快起来别睡了1 小时前
代理模式:送花风波
前端·javascript·架构
FogLetter2 小时前
从add函数类型判断说起:NaN的奇幻漂流与JS数据类型的奥秘
前端·javascript
兰贝达2 小时前
商品SKU选择器实现思路,包简单
前端·javascript·vue.js