javaScript设计模式:发布订阅模式
发布订阅模式的思想是在观察者模式的基础上演变而来,在观察者模式中客户端监听到对象某个行为就触发对应任务程序。而在发布订阅模式中依然基于这个核心思想,所以有时候也会将两者认为是同一种设计模式。它们的不同之处在于观察者模式中的客户端与服务端是相互耦合的,即服务端对象直接绑定客户端的监听任务,客户端直接绑定监听服务端的行为。而在发布订阅模式中,客户端与服务端是解耦的,它们彼此不相互绑定,两者的联系由中间的通道模块绑定实现连接。发布订阅模式相对于观察者模式实现了解耦,相互之间互不干扰。
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");
——生命自会找到蓬勃之路。
分类:
javaScript 设计模式
, 设计模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2019-04-02 jQuery使用():Callbacks回调函数列表之异步编程(含源码分析)