javascript 设计模式 发布订阅模式
来源:互联网 发布:树莓派python编程 编辑:程序博客网 时间:2024/05/29 14:07
发布/订阅模式(Pub/Sub)是一种消息模式,它有两个参与者:发布者和订阅者。发布者向某个信道发布
一条消息,订阅者绑定这个信道,当有消息发布至信道时就会接收到一个通知。最重要的一点是,发布者和
订阅者是完全解耦的,彼此并不知晓对方的存在。两者仅仅共享一个信道名称。
这种模式在js里面有这天然的优势,因为js本身就是事件驱动型语言。比如,页面上有一个button,
你点击一下就会触发上面的click事件,而此时有一部分程序正在监听这个事件,随之触发相关的处理程序。
事实上,我们也早就熟悉这个模式了,只是不知道这叫什么(订阅发布模式 又名 观察者模式).
这个模式最大的一个好处就在于,能够解耦回调函数,让你的程序看起来更美观(虽然现在有Promise和
一条消息,订阅者绑定这个信道,当有消息发布至信道时就会接收到一个通知。最重要的一点是,发布者和
订阅者是完全解耦的,彼此并不知晓对方的存在。两者仅仅共享一个信道名称。
这种模式在js里面有这天然的优势,因为js本身就是事件驱动型语言。比如,页面上有一个button,
你点击一下就会触发上面的click事件,而此时有一部分程序正在监听这个事件,随之触发相关的处理程序。
事实上,我们也早就熟悉这个模式了,只是不知道这叫什么(订阅发布模式 又名 观察者模式).
这个模式最大的一个好处就在于,能够解耦回调函数,让你的程序看起来更美观(虽然现在有Promise和
Deferred帮忙,但是不彻底)。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>发布订阅模式</title></head><body><script> var pubsub = (function(){ var q = {}, topics = {}, subUid = -1; //发布消息 q.publish = function(topic, args) { if (!topics[topic]) { return; } var subs = topics[topic], len = subs.length; while(len--) { subs[len].func(topic, args); } return this; }; //订阅事件 q.subscribe = function(topic, func) { topics[topic] = topics[topic] ? topics[topic] : []; var token = (++subUid).toString(); topics[topic].push({ token : token, func : func }); return token; }; return q; //取消订阅就不写了,遍历topics,然后通过保存前面返回token,删除指定元素 })(); //触发的事件 var logmsg = function(topics, data) { console.log("logging:" + topics + ":" + data); } //监听指定的消息'msgName' var sub = pubsub.subscribe('msgName', logmsg); //发布消息'msgName' pubsub.publish('msgName', 'hello world'); //发布无人监听的消息'msgName1' pubsub.publish('anotherMsgName', 'me too!');</script></body>
阅读全文
0 0
- javascript设计模式-(发布-订阅模式)
- JavaScript设计模式-发布订阅模式
- javascript 设计模式 发布订阅模式
- 【JavaScript设计模式】行为型设计模式--发布-订阅模式
- Javascript设计模式-07-观察者模式(发布订阅模式)
- Javascript设计模式-发布/订阅模式最小化的示例
- 浅析JavaScript设计模式——发布-订阅/观察者模式
- javascript中的发布/订阅模式
- JavaScript之发布-订阅模式
- 设计模式---订阅发布模式(Subscribe/Publish)
- 设计模式---订阅发布模式(Subscribe/Publish)
- 设计模式——订阅发布模式
- 设计模式之发布/订阅模式
- java设计模式-观察者(发布-订阅)模式
- JS设计模式之发布订阅模式
- 浅谈JavaScript设计模式——观察者模式(发布订阅模式)
- 用 JavaScript 实现发布/订阅模式
- 【学习笔记javascript设计模式与开发实践(发布--订阅模式)----8】
- 【比特币】 From P2SH of bitcoin to Smart Contract of ethereum
- python学习:位置参数、默认参数、可变参数 RF实例
- Qt程序运行提示“it could not find or load the QT platform plugin “windows””
- [转]wpa_supplicant详解
- 创建PV报错pvcreate Read-only locking type set
- javascript 设计模式 发布订阅模式
- 任学堂说科技李彦宏、马云、马化腾的人工智能竞赛,获胜的人是他!
- BZOJ3697 点分治
- matlab libsvm svmtrain 完全禁止输出
- Unable to instantiate application 解决办法
- Python 初学者 入门 应该学习 python 2 还是 python 3?
- 【java】快速访问http网络请求框架QuickHttp的使用
- 手机版h5城市选择
- 全注解方式整合spring+mybatis模拟springboot整合