js设计模式(一)发布订阅模式
let i = 0 export default class Publisher { // 所有用户 subscribers = {} // 订阅事件 // 将一个topic触发的所有事件放到一个对象中 subscribe(topic, handler) { if (!(topic in this.subscribers)) { this.subscribers[topic] = {} } const id = `${i++}` // 给每个handler编号,然后放到同一个topic下 this.subscribers[topic][id] = handler return id } // 注销事件 unsubscribe(topic, id){ const handler = this.subscribers[topic] delete handler[id] } // 发布事件 publish(topic, ...args) { // 遍历一个topic下的所有事件,并执行 for (const key in this.subscribers[topic]) { const handler = this.subscribers[topic][key] if (typeof handler === 'function') { handler(...args) } } } // 清除topic clear(topic) { delete this.subscribers[topic] } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步