标签:订阅 javaScript 模式 events arg 设计模式 event 客户端
发布订阅模式的思想是在观察者模式的基础上演变而来,在观察者模式中客户端监听到对象某个行为就触发对应任务程序。而在发布订阅模式中依然基于这个核心思想,所以有时候也会将两者认为是同一种设计模式。它们的不同之处在于观察者模式中的客户端与服务端是相互耦合的,即服务端对象直接绑定客户端的监听任务,客户端直接绑定监听服务端的行为。而在发布订阅模式中,客户端与服务端是解耦的,它们彼此不相互绑定,两者的联系由中间的通道模块绑定实现连接。发布订阅模式相对于观察者模式实现了解耦,相互之间互不干扰。
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,模式,events,arg,设计模式,event,客户端 来源: https://www.cnblogs.com/ZheOneAndOnly/p/16089994.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。