使用js写一个发布订阅者
在 JavaScript 中,实现一个简单的发布/订阅(Pub/Sub)模式可以通过以下步骤来完成:
- 创建一个对象来存储事件和对应的回调函数。
- 提供一个订阅(subscribe)方法来添加事件和回调。
- 提供一个发布(publish)方法来触发事件并执行对应的回调。
- 可选地提供一个取消订阅(unsubscribe)方法来移除事件对应的回调。
以下是一个简单的实现示例:
class PubSub {constructor() {this.events = {};}// 订阅事件subscribe(event, callback) {if (!this.events[event]) {this.events[event] = [];}this.events[event].push(callback);}// 发布事件publish(event, data) {if (this.events[event]) {this.events[event].forEach(callback => {callback(data);});}}// 取消订阅unsubscribe(event, callback) {if (this.events[event]) {const index = this.events[event].indexOf(callback);if (index !== -1) {this.events[event].splice(index, 1);}}}
}// 使用示例
const pubSub = new PubSub();// 订阅者
const subscriber1 = data => {console.log('Subscriber 1 received:', data);
};
const subscriber2 = data => {console.log('Subscriber 2 received:', data);
};// 订阅事件
pubSub.subscribe('message', subscriber1);
pubSub.subscribe('message', subscriber2);// 发布事件
pubSub.publish('message', 'Hello, World!');// 取消订阅
pubSub.unsubscribe('message', subscriber1);// 再次发布事件,只有subscriber2会接收到消息
pubSub.publish('message', 'Hello again!');
在这个例子中,PubSub
类有三个方法:subscribe
用于添加订阅,publish
用于发布事件,unsubscribe
用于取消订阅。当发布一个事件时,所有订阅了该事件的回调函数都会被调用。
这种模式在许多场景中都非常有用,比如在组件间进行解耦通信,或者在复杂的应用程序中管理不同部分之间的事件流。