赞
踩
发布订阅者模式用于处理对象之间的事件通信,该模式涉及两个主要角色:发布者(Publisher)和订阅者(Subscriber)
发布者维护一个事件列表,并在事件发生时通知所有已注册的订阅者。订阅者可以选择接收或忽略通知。
发布-订阅者模式通常用于解耦应用程序中的组件,使得它们可以独立地交互。以下是一些使用发布-订阅者模式的场景:
class EventBus { constructor() { this.listeners = {}; } on(event, listener) { if (!this.listeners[event]) { this.listeners[event] = []; } this.listeners[event].push(listener); } emit(event, ...args) { const listeners = this.listeners[event]; if (listeners) { listeners.forEach((listener) => { listener(...args); }); } } removeListener(event, listenerToRemove) { const listeners = this.listeners[event]; if (listeners) { this.listeners[event] = listeners.filter( (listener) => listener !== listenerToRemove ); } } removeAllListeners(event) { delete this.listeners[event]; } }
这个 EventBus
类有 on
、emit
、off
和 clear
方法。
on(event, listener)
方法用于向指定事件添加一个监听器。emit(event, ...args)
方法用于触发指定事件,会执行所有与该事件相关的监听器函数,并将提供的参数传递给它们。removeListener(event, listenerToRemove)
方法用于从指定事件中删除特定的监听器函数。removeAllListeners(event)
方法用于删除指定事件上的所有监听器函数。你可以像这样使用它:
const bus = new EventBus();
const listenerFunction = (args) => {
console.log(args);
};
// 1. 添加一个监听器
bus.on('click', listenerFunction);
// 2. 触发事件
bus.emit('click', 'Hello');
// 3. 删除监听器
bus.removeListener('click', listenerFunction);
// 4. 删除所有监听器
bus.removeAllListeners('click');
观察者模式和发布订阅者模式都是用来实现组件间通信的设计模式,但有以下区别:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。