Skip to content

发布-订阅模式是一种消息传递模式,允许发送者(发布者)发送消息,而不直接将其发送给特定的接收者(订阅者)。同样,接收者可以订阅一个或多个消息,而无需知道发送者的身份。这种模式在事件驱动编程中非常常见,比如浏览器的DOM事件、Node.js的事件等。

javascript
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]) {  
            this.subscribers[event] = this.subscribers[event].filter(subCallback => subCallback !== callback);  
        }  
    }  
  
    // 发布事件  
    publish(event, data) {  
        if (this.subscribers[event]) {  
            this.subscribers[event].forEach(callback => callback(data));  
        }  
    }  
}  
  
// 使用示例  
const pubsub = new PubSub();  
  
// 订阅事件  
pubsub.subscribe('myEvent', data => console.log('Received data:', data));  
  
// 发布事件  
pubsub.publish('myEvent', 'Hello, world!'); // 输出: Received data: Hello, world!  
  
// 取消订阅事件  
pubsub.unsubscribe('myEvent', (data) => console.log('Received data:', data));  
  
// 再次发布事件,此时不会有输出,因为已经取消了订阅  
pubsub.publish('myEvent', 'Hello again!');