发布订阅模式
观察者和目标要相互知道
发布者和订阅者不用相互知道,通过第三方实现调度,属于经过解耦合的观察者模式
//public发布
//subscribe订阅
const PubSub = {
message:{},
//发布
publish(data){
if(!this.message[type]){
return
}
this.message[type].forEach(item => {
item(data)
})
},
//订阅
subscribe(type,cb){
if(!this.message[type]){
this.message[type] = [cb]
}else{
this.message[type].push(cb)
}
},
//取消订阅
unsubscribe(type,cb){
if(!this.message[type]){
return
}
if(!cb){
//取消所有
this.message[type] && (this.message[type].length = 0)
}else{
this.message[type] = this.message[type].filter(item => {
item !== cb
})
}
}
}
function testA(data){
console.log('testA',data)
}
function testB(data){
console.log('testB',data)
}
PubSub.subscribe('A',testA)
PubSub.subscribe('B',testB)
bscribe(‘A’,testA)
PubSub.subscribe(‘B’,testB)