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");
复制代码

 

posted @   他乡踏雪  阅读(830)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2019-04-02 jQuery使用():Callbacks回调函数列表之异步编程(含源码分析)
点击右上角即可分享
微信分享提示