发布/ 订阅(Pub/Sub)观察者模式

发布/ 订阅(Pub/Sub)是,它有两个参与者:发布者和订阅者。发布者向某个信道(channel)发布一条消息,订阅者绑定这个信道,当有消息发布至信道时就会接收到一个通知。最重要的一点是,发布者和订阅者是完全解耦的,彼此并不知晓对方的存在一种消息模式。
两者仅仅共享一个信道名称。发布者和订阅者的解耦可以让你的应用易于扩展,而不必引入额外的交叉依赖和耦合,从而提高了应用的可维护性,添加额外功能也非常容易。那么,应当如何在应用中使用发布/ 订阅(Pub/Sub)模式呢?你只需记录回调和事件名称的对应关系及调用它们的方法。看一下这个例子,这段代码中实现了PubSub 对象,用它可以添加并触发事件监听:

var PubSub={
     subscribe:function(ev,callback){
          //创建_callback对象,除非已经存在
          var calls=this._callback||(this._callback={ });

          //针对给定的事件key创建一个数组,除非这个数组已经存在
          //返回回调函数追加到这个数组中
          (this._callback[ev]|| (this._callback[ev]=[ ]) ).push[callback];
          return this;
     },
     publish:function(){
          //将arguments对象转换为真正的数组
          var args=Array.prototype.slice.call(arguments,0);
          //取得第一个参数(事件名)
          var ev=args.shift();
          //如果不存在_callback对象,则返回
          //或者如果不包括给定事件对应的数组
          var list ,calls
          if(!(calls==this._callback)) return this;
          if(!(list==this._callsback[ev])) return this;
          //触发回调
          for(var i=0;i<list.length;i++){
               list[i].apply(this,args);
               return this;
          }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 发布订阅模式 发布/订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依...
    自度君阅读 2,006评论 0 2
  • 1 消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,...
    Bobby0322阅读 10,950评论 0 24
  • 不知道你看小说有没有这样的印象,很多描写一个人被整蛊了的神态,总爱这么写“只见他全身蓦地一震,嘴角不自然地抽动了一...
    一蓑烟雨_886阅读 150评论 0 0
  • 时间:2017年11月4日 星期六天气:晴 8~26度 隔了两天来补作业,最近夜生活太频繁了,导致没有时间写...
    Jango哑炮阅读 215评论 2 1