发布订阅模式的思想是在观察者模式的基础上演变而来,在观察者模式中客户端监听到对象某个行为就触发对应任务程序。而在发布订阅模式中依然基于这个核心思想,所以有时候也会将两者认为是同一种设计模式。它们的不同之处在于观察者模式中的客户端与服务端是相互耦合的,即服务端对象直接绑定客户端的监听任务,客户端直接绑定监听服务端的行为。而在发布订阅模式中,客户端与服务端是解耦的,它们彼此不相互绑定,两者的联系由中间的通道模块绑定实现连接。发布订阅模式相对于观察者模式实现了解耦,相互之间互不干扰。

 1 //发布者
2 let publisher = {
3 data:0,
4 publishTopic:function(event){
5 let arg = arguments.length > 1 ? Array.prototype.slice.call(arguments,1) : [undefined];
6 channel.pub(event,...arg);
7 }
8 };
9 //通道
10 let channel = {
11 events:{},
12 pub:function(event,arg){
13 //实现发布
14 if(!this.events[event]){
15 return;
16 }
17 this.events[event].forEach(ele => {
18 ele(arg);
19 });
20 },
21 sub:function(event,callback){
22 //实现订阅
23 if(!this.events[event]){
24 this.events[event] = [];
25 }
26 this.events[event].push(callback);
27 }
28 };
29 //订阅者
30 let subscribe = {
31 subscribeTopics:function(event,callback){
32 channel.sub(event,callback);
33 }
34 };
35
36 //订阅
37 subscribe.subscribeTopics("月刊",data =>{
38 console.log(data);
39 });
40 //发布
41 publisher.publishTopic("月刊","aaa");

最新文章

  1. Struts核心技术简介
  2. 自定义jsp标签
  3. jQuery -> bind / live / delegate 的终结者 - on
  4. Day02_JAVA语言基础第二天
  5. 初识Redis
  6. python 机器学习 K-近邻算法
  7. C# LINQ语法详解
  8. word模板导出的几种方式:第二种:C#通过模板导出Word(文字,表格,图片) 占位符替换
  9. 配置IPMI
  10. backbond整体架构
  11. 苹果电脑利用curl下载数据集
  12. [C++]求解三元一次方程组
  13. 【Android】录音-amr音频录制
  14. WebMagic写的网络爬虫
  15. Vertica备份恢复
  16. iis7中session丢失的解决方法小结
  17. Entity Framework Context上下文管理(CallContext 数据槽)
  18. WEB应用从服务器主动推送的方法
  19. AngularJS注入依赖路由总结
  20. Linux相关——关于gdb的checkpoint & breakpoints指令

热门文章

  1. DDos攻击竟然这么恐怖,它的原理是什么?
  2. PHP-制作验证码
  3. elasticsearch高亮之词项向量
  4. petite-vue源码剖析-ref的工作原理
  5. tensorflow源码解析之common_runtime-graph_optimizer
  6. 统计学中数据分布的偏度(skewness)和峰度(kurtosis)
  7. LGP2522题解
  8. Java基础——ArrayList
  9. MATLAB奔溃仅左上角显示关闭界面X
  10. 【技术干货】华为云FusionInsight MRS的自研超级调度器Superior Scheduler