首页 > 其他 > 详细

发布/订阅模式

时间:2020-03-20 12:45:08      阅读:38      评论:0      收藏:0      [点我收藏+]

有好多人一提到发布、订阅模式就头大,不了解的人就会想,他是干什么的啊  和观察者模式有什么区别呢

其实发布订阅模式和观察者模式的区别还是很大的,订阅发布模式比观察者模式多一个调度的部分

虽然两种模式都存在订阅者和发布者(具体观察者可认为是订阅者、具体目标可认为是发布者),但是观察者模式是由具体目标调度的,而发布/订阅模式是统一由调度中心调的,所以观察者模式的订阅者与发布者之间是存在依赖的,而发布/订阅模式则不会。
在发布订阅模式中,组件是松散耦合的,正好和观察者模式相反。
说到发布订阅模式,因为是一对一或者一对多的关系,具体实现其实就是把你想要发布的东西,存到一个对象或者数组当中,用的时候直接去遍历调用
代码如下:
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)
})

 

看完这个是不是感觉发布订阅模式很简单呢

发布/订阅模式

原文:https://www.cnblogs.com/wb336035888/p/12530234.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!