设计模式-发布订阅模式

发布订阅

该设计模式思想:比如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)