发布订阅
该设计模式思想:比如DOM的事件监听,Vue-EventBus等
发布订阅模式,首先要有一个事件中心,用于管控所有事件,订阅者事件中心订阅事件A,当事件A发布时,事件中心会告知所有订阅者事件A已经发布,可以选择执行订阅者传的回调函数。
事件中心对所有事件的管控可以用MAP进行管理。
具体代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| class Subject { constructor() { this.events = new Map()
} on(eventName, eventFunction) { if (!this.events.get(eventName)) { this.events.set(eventName, [eventFunction]) } else { this.events.get(eventName).push(eventFunction) }
} emit(eventName, ...args) { let eventList = this.events.get(eventName) for (let event of eventList) { event.call(this, ...args) }
} }
const s = new Subject() s.on('a', () => { console.log('event a is begin'); }) s.on('a', () => { console.log('event a is start'); }) s.on('b', (a, b) => { console.log(a + b); }) s.on('b', (a, b) => { console.log(a * b); })
s.emit('a') s.emit('b', 1, 2)
|