javaScript设计模式:发布订阅模式
2024-09-08 10:34:44
发布订阅模式的思想是在观察者模式的基础上演变而来,在观察者模式中客户端监听到对象某个行为就触发对应任务程序。而在发布订阅模式中依然基于这个核心思想,所以有时候也会将两者认为是同一种设计模式。它们的不同之处在于观察者模式中的客户端与服务端是相互耦合的,即服务端对象直接绑定客户端的监听任务,客户端直接绑定监听服务端的行为。而在发布订阅模式中,客户端与服务端是解耦的,它们彼此不相互绑定,两者的联系由中间的通道模块绑定实现连接。发布订阅模式相对于观察者模式实现了解耦,相互之间互不干扰。
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");
最新文章
- Struts核心技术简介
- 自定义jsp标签
- jQuery ->; bind / live / delegate 的终结者 - on
- Day02_JAVA语言基础第二天
- 初识Redis
- python 机器学习 K-近邻算法
- C# LINQ语法详解
- word模板导出的几种方式:第二种:C#通过模板导出Word(文字,表格,图片) 占位符替换
- 配置IPMI
- backbond整体架构
- 苹果电脑利用curl下载数据集
- [C++]求解三元一次方程组
- 【Android】录音-amr音频录制
- WebMagic写的网络爬虫
- Vertica备份恢复
- iis7中session丢失的解决方法小结
- Entity Framework Context上下文管理(CallContext 数据槽)
- WEB应用从服务器主动推送的方法
- AngularJS注入依赖路由总结
- Linux相关——关于gdb的checkpoint &; breakpoints指令