发布/订阅模式
有好多人一提到发布、订阅模式就头大,不了解的人就会想,他是干什么的啊 和观察者模式有什么区别呢
其实发布订阅模式和观察者模式的区别还是很大的,订阅发布模式比观察者模式多一个调度的部分
虽然两种模式都存在订阅者和发布者(具体观察者可认为是订阅者、具体目标可认为是发布者),但是观察者模式是由具体目标调度的,而发布/订阅模式是统一由调度中心调的,所以观察者模式的订阅者与发布者之间是存在依赖的,而发布/订阅模式则不会。
在发布订阅模式中,组件是松散耦合的,正好和观察者模式相反。说到发布订阅模式,因为是一对一或者一对多的关系,具体实现其实就是把你想要发布的东西,存到一个对象或者数组当中,用的时候直接去遍历调用
代码如下:
function pubSub() {
var topics = {};
function subScribe(topic, fn) {
if (!topics[topic]) {
topics[topic] = [];
}
//并未去重,如果去重的话不能使用解构赋值,因为[...new Set(arr)]这种方式只能去重基本数值类型,fn是函数引用类型
topics[topic].push(fn);
}
function publish(topic, ...args) {
// console.log(topics[topic].length)
if (!topics[topic]) return;
// 迭代相同topic值对应的函数
for (let fn of topics[topic]) {
fn(...args)
}
}
return {
subScribe, publish
}
}
var pubSub1 = new pubSub();
pubSub1.subScribe('add', function (a, b) {
console.log(a + b)
})
pubSub1.subScribe('minus', function (a, b) {
console.log(a - b)
})
看完这个是不是感觉发布订阅模式很简单呢

浙公网安备 33010602011771号