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设计模式:发布订阅模式的更多相关文章
- javascript设计模式——发布订阅模式
前面的话 发布—订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在javascript开发中,一般用事件模型来替代传统的发布—订阅模 ...
- javascript 设计模式 -- 发布/订阅模式
直接上代码: index.html : <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- 设计模式-发布订阅模式(javaScript)
1. 前言 2. 什么是发布订阅模式 3. 发布订阅优缺点 4. 举例 4. 总结 1. 前言 发布订阅者模式是为了发布者和订阅者之间避免产生依赖关系,发布订阅者之间的订阅关系由一个中介列表来维护.发 ...
- js设计模式--发布订阅模式
前言 本系列文章主要根据<JavaScript设计模式与开发实践>整理而来,其中会加入了一些自己的思考.希望对大家有所帮助. 概念 发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的 ...
- [转]js设计模式—发布订阅模式
发布—订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在javascript开发中,一般用事件模型来替代传统的发布—订阅模式.本文将 ...
- [转] 浅析JavaScript设计模式——发布-订阅/观察者模式
前一段时间一直在写CSS3的文章 一直都没写设计模式 今天来写写大名鼎鼎观察者模式 先画张图 观察者模式的理解 我觉得还是发布-订阅模式的叫法更容易我们理解 (不过也有的书上认为它们是两种模式……) ...
- js设计模式-发布/订阅模式
一.前言 发布订阅模式,基于一个主题/事件通道,希望接收通知的对象(称为subscriber)通过自定义事件订阅主题,被激活事件的对象(称为publisher)通过发布主题事件的方式被通知. 就和用户 ...
- Javascript设计模式之发布-订阅模式
简介 发布-订阅模式又叫做观察者模式,他定义了一种一对多的依赖关系,即当一个对象的状态发生改变的时候,所有依赖他的对象都会得到通知. 回忆曾经 作为一名前端开发人员,给DOM节点绑定事件可是再频繁不过 ...
- 理解JavaScript设计模式与开发应用中发布-订阅模式的最终版代码
最近拜读了曾探所著的<JavaScript设计模式与开发应用>一书,在读到发布-订阅模式一章时,作者不仅给出了基本模式的通用版本的发布-订阅模式的代码,最后还做出了扩展,给该模式增加了离线 ...
- [转] JavaScript设计模式之发布-订阅模式(观察者模式)-Part1
<JavaScript设计模式与开发实践>读书笔记. 发布-订阅模式又叫观察者模式,它定义了对象之间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖它的对象都将得到通知. 例如 ...
随机推荐
- 3. Java基础
3.Java基础[基于IDEA] 3.1.快捷键 psvm 创建主方法 sout 打印 ctrl+d 复制当前行到下一行 alt+ender 创建局部变量,类: 3.2.注释,标识符,关键字 注释 平 ...
- egg微信小程序支付(服务商)插件封装
下单 通过下单获取prepay_id,然后返回给小程序发起支付 若是服务商,mch_id:传入服务的商户号:sub_mch_id:传入子商户的商户号,算法签名的秘钥是服务商的秘钥. 'use stri ...
- 被广泛使用的OAuth2.0的密码模式已经废了,放弃吧
最近一直有同学在问,OAuth2密码模式为啥Spring Security还没有实现,就连新的Spring Authorization Server也没有这个玩意儿. 其实这里可以告诉大家,OAuth ...
- Linux环境下安装RocketMQ
最近在学习消息队列,针对RocketMQ进行了初步研究,这里记录下安装配置的过程,与大家共同分享 一.选择合适的版本 注:安装.运行过程中需要依赖JDK,因此安装之前需要保证当前linux环境下具备上 ...
- Makefile 入门(加减乘除实现)
Makefile 入门(加减乘除实现) 准备 使用任意Linux发行版即可,本文使用WSL Ubuntu. 开始之前,需要安装必要的工具: sudo apt install make g++ 开始 1 ...
- Cobalt Strike之HTA木马
点击 attacks --> packages --> HTML Application 弹出的对话框method选择powershell (不要选第一个,不太兼容)点击确定 测试运行
- 通过webgoat-xxe、jwt学习Java代码审计
WebGoat-JWT JWT Tokens 01 概念 本课程将介绍如何使用JSON Web Token(JWT)进行身份验证,以及在使用JWT时需要注意的常见陷阱. 目标 教授如何安全地实现令牌的 ...
- IC设计基础
一 前言 这一周连续两场线下面试,紧接着又是微信视频面试,从连续三天的面试中,收获颇丰! 存在的问题: 一是对项目细节模糊: 二是IC基础知识薄弱: 具体表现是,在面试过程中,如被问到DDR3和千兆以 ...
- [WC2018]州区划分(FWT,FST)
[WC2018]州区划分(FWT,FST) Luogu loj 题解时间 经典FST. 在此之前似乎用到FST的题并不多? 首先预处理一个子集是不是欧拉回路很简单,判断是否连通且度数均为偶数即可. 考 ...
- 动态规划优化算法——wqs二分 and 折线优化
坑先扔着,督促自己以后来补!!!