最简发布订阅模式
//调度中心
const publish = {
list:[],
public(){
this.list.forEach(item=>item())
},
subscribe(cb){
this.list.push(cb)
}
}
//订阅函数
function testA(){
console.log('A')
}
function testB(){
console.log('B')
}
publish.subscribe(testA)
publish.subscribe(testB)
//发布函数
publish.public() // A B
复杂实现
//调度中心
const publish = {
message:{
// <type>:<[fn]> 保存的类型与其对应的函数数组
},
public(type){
if(!this.message[type]) return
this.message[type].forEach(item=>item())
},
subscribe(type,cb){
if(!this.message[type]){
this.message[type] = [cb]
}else{
this.message[type].push(cb)
}
}
}
//订阅函数
function testA(){
console.log('A')
}
function testB(){
console.log('B')
}
publish.subscribe('A',testA) //传入事件类型和订阅函数
publish.subscribe('B',testB)
//发布函数
publish.public('A') // 发布A类型函数