javascript订阅模式浅析和基础实例
前言
最近在开发redux或者vux的时候,状态管理当中的createStore,以及我们在组件中调用的dispatch传递消息给状态管理中心,去处理一些操作的时候,有些类似我们常见到订阅模式
于是写了一个小demo去实现了一下订阅模式的过程
思路
订阅模式类似某个平台的作者,或者UP主,而平台充当了一个中间件传递消息的作用,作者是发布订阅的人,在被关注或者订阅了之后,发布的消息,收听作者的用户,可以收到作者发布的消息
- 创建平台
var Messege = function () {
this.list = {};
this.cache = {};
};
- 创建完成平台之后,平台的作者自己创建内容,发布消息
Messege.prototype.add = function (noticeType, client) {
// 将收到的信息加入到noticeType订阅列表当中
console.log(noticeType);
console.log(client);
if (!this.list[noticeType]) this.list[noticeType] = [];
this.list[noticeType].push(client);
this.cache[noticeType].forEach((words) => {
client.listen(noticeType, words);
});
};
- 同时还能删除自己已经发布的消息
// 通过传入的信息类型,遍历查找
Messege.prototype.remove = function (noticeType, client) {
if (!this.list[noticeType]) return; //可以作为提示或者说处理符合业务需求的操作
var index = this.list[noticeType].findIndex((item) => item === client);
console.log(this.list[noticeType].splice(index, 1));
this.list[noticeType].splice(index, 1);
};
在发布了这些往期列表当中,以及订阅了up主的订阅者,可以通过往期消息查看以前发布过的文章信息列表
- 此时需要一个缓存去存储以及发布过的信息,充当一个历史记录的角色
Messege.prototype.triggle = function (noticeType, words) {
if (!this.cache[noticeType]) this.cache[noticeType] = [];
this.cache[noticeType].push(words);
if (!this.list[noticeType]) return;
this.list[noticeType].forEach((client) => {
client.listen(noticeType, words);
});
};
- 订阅对象实例化,我们可以实例化对象中,去处理一些需要执行的业务需求
var Client = function (name) {
this.name = name;
};
// 监听事件,事件处理逻辑
Client.prototype.listen = function (noticeType, words) {
console.log(`${this.name}收到${noticeType}的信息是:${words}`);
};
- 完成了发布者的功能之后,我们就可以自己测试发布一些消息
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>订阅模式</title>
</head>
<body>
</body>
<script src="./subscribe.js"></script>
<script>
var client1 = new Client('client1')
var client2 = new Client('client2')
var messege = new Messege()
// messege.add('新消息01', client1)
// messege.remove('新消息01', client1)
messege.triggle('新消息02', "这是一段消息01");
messege.triggle('新消息02', "这是一段消息02");
var client3 = new Client('client3');
messege.add('新消息03', client3);
messege.add('新消息03', client3);
messege.remove('新消息03', client3);
</script>
</html>
通过实例化对象,实例化订阅信息之后,可以实现页面或者组件之间,相应的一些状态更改和数据之间的传递。
以上是javascript订阅模式的浅析
源码地址:
// githup仓库地址
https://github.com/akari16/FunctionRealization
文章个人博客地址:javascript订阅模式浅析和基础实例,欢迎订阅
javascript订阅模式浅析和基础实例的更多相关文章
- 理解JavaScript设计模式与开发应用中发布-订阅模式的最终版代码
最近拜读了曾探所著的<JavaScript设计模式与开发应用>一书,在读到发布-订阅模式一章时,作者不仅给出了基本模式的通用版本的发布-订阅模式的代码,最后还做出了扩展,给该模式增加了离线 ...
- javascript中的发布订阅模式与观察者模式
这里了解一下JavaScript中的发布订阅模式和观察者模式,观察者模式是24种基础设计模式之一. 设计模式的背景 设计模式并非是软件开发的专业术语,实际上设计模式最早诞生于建筑学. 设计模式的定义是 ...
- Javascript中理解发布--订阅模式
Javascript中理解发布--订阅模式 阅读目录 发布订阅模式介绍 如何实现发布--订阅模式? 发布---订阅模式的代码封装 如何取消订阅事件? 全局--发布订阅对象代码封装 理解模块间通信 回到 ...
- javascript设计模式——发布订阅模式
前面的话 发布—订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在javascript开发中,一般用事件模型来替代传统的发布—订阅模 ...
- 《JavaScript设计模式与开发实践》笔记第八章 发布-订阅模式
第八章 发布-订阅模式 发布-订阅模式描述 发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知. 发布-订阅模式可以广泛应用于 ...
- 浅析JavaScript工厂模式
这里主要介绍两种工厂模式,第一种“简单工厂模式”,第二种“工厂方法模式” 简单工厂模式 1.定义 由一个工厂对象决定对象创建某一种产品对象的的实例.主要用来创建同一类对象. 2.具体需求 现在有一个登 ...
- [转] Javascript中理解发布--订阅模式
发布订阅模式介绍 发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 现实生活中的发布- ...
- [转] JavaScript设计模式之发布-订阅模式(观察者模式)-Part1
<JavaScript设计模式与开发实践>读书笔记. 发布-订阅模式又叫观察者模式,它定义了对象之间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖它的对象都将得到通知. 例如 ...
- 【转】Javascript中理解发布--订阅模式
Javascript中理解发布--订阅模式 阅读目录 发布订阅模式介绍 发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时 ...
随机推荐
- 计算机网络-5-9-TCP拥塞控制
TCP拥塞控制 拥塞控制的一般原理 在计算机网络中的链路容量(带宽),交换节点中的缓存和处理机等,都是网络的资源,在某段时间,若对网络中某一资源的需求超过该资源所能提供的可用部分,网络性能就会变坏,这 ...
- openstack horizon 学习(3) DataTable
上一篇中粗略的讲了下openstack中horizon的dashboard和panel的添加,本打算在这章中对有关于pluggable settings中的配置做详细的总结,然放弃了这念头.原因是搞懂 ...
- Java基础复习(七)
一.基本语法 1. java没有sizeof.goto.const这些关键字,但不能用goto.const作为变量名,虽然可以用sizeof,但为啥非得要用这个呢. 2.十六进制数以0x或0X开头: ...
- yum本地源仓库安装报错 被锁定如何解决?
yum安装报错被锁定如何解决 上图!!!!!如图的报错 解决方法: 是不是很简单 智商在地上摩擦~~~
- MySQL-MMM高可用架构
MySQL-MMM高可用架构 目录 MySQL-MMM高可用架构 一.MMM 1. MMM的概述 2. MMM的应用场景 3. MMM的特点 4. 关于MMM高可用架构的说明 5. 用户及授权 二.案 ...
- 痞子衡嵌入式:揭秘i.MXRT1060,1010上串行NOR Flash冗余程序启动设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1060,1010上串行NOR Flash冗余程序启动设计. 工业产品设计里经常会有冗余程序/备份程序设计的需求,因为在工业 ...
- MATLAB基础学习篇(1)
MATLAB中只定义了以2和10为底对数,其它 使用换底公式,例如:log8(7)=log7/log8. x=input('Please enter x:'); y=input('Please ent ...
- 虫师Selenium2+Python_11、自动化测试项目实战
P276 11.1.3 自动化测试用例编写原则 在编写自动化测试用例过程中应该遵循以下原则: 1.一个用例为一个完整的场景,从用户登录系统到最终退出并关闭浏览器: 2.一个用例只能验证一个功能点,不要 ...
- Ceres 四重奏 之 入门简介
Ceres 翻译为谷神星,是太阳系中的一颗矮行星,于1801年被意大利神父 Piazzi 首次观测到,但随后 Piazzi 因为生病,跟丢了它的运行轨迹. 几个月后,德国数学家 Gauss,利用最小二 ...
- KiSystemCall64 win10 21h2函数流程分析 3环到0环
0x00基本信息 系统:windows 10 21h2 工具:ida 7.7 , windbg 10 3环写一个win32k 函数 看访问流程 0x01分析 例如:3环函数 FlattenPath(x ...