Javascript设计模式-发布/订阅模式最小化的示例
来源:互联网 发布:mysql中的存储过程 编辑:程序博客网 时间:2024/05/29 15:19
Javascript设计模式-发布/订阅模式最小化的示例
示例代码
/*经典的发布/订阅模式*/var pubs = {};(function(p){ var events = {}, subId = -1; var subscribe = p.subscribe = function(name, callback, one){ var list = events[name] || (events[name] = []), token = (++subId).toString(); list.push({ 'token' : token, 'callback' : callback }); return token; } var publish = p.publish = function(name, data){ var list = events[name], func; if(list){ // Copy callback lists to prevent modification list = list.slice() // Execute event callbacks while((func = list.shift()) && func.callback){ func.callback(name, data); } } } // Remove event. If `callback` is undefined, remove all callbacks for the // event. If `event` and `callback` are both undefined, remove all callbacks // for all events var unsubscribe = p.unsubscribe = function(name, callback){ if (!(name || callback)) { events = {}; return p; } var list = events[name]; if(list){ if(callback){ for (var i = list.length - 1; i >= 0; i--) { if (list[i] === callback) { list.splice(i, 1); } } }else{ delete events[name]; } } }})(pubs);
调用代码
var messageLogger = function(name, data){ console.log(new Date().getTime() + "--Loggin : " + name + ":" + data ) }; var subcription = pubs.subscribe('inbox/newMessage', messageLogger); pubs.publish('inbox/newMessage', 'Hello World'); pubs.publish('inbox/newMessage', 'Hello, are you still there?'); pubs.unsubscribe('inbox/newMessage');
这个模式多被用在各个框架的事件模型中,其中Backbone中使用的比较典型。
0 0
- Javascript设计模式-发布/订阅模式最小化的示例
- javascript设计模式-(发布-订阅模式)
- JavaScript设计模式-发布订阅模式
- javascript 设计模式 发布订阅模式
- 【JavaScript设计模式】行为型设计模式--发布-订阅模式
- Javascript设计模式-07-观察者模式(发布订阅模式)
- 浅析JavaScript设计模式——发布-订阅/观察者模式
- 我理解的设计模式:观察者模式(订阅发布模式)
- javascript中的发布/订阅模式
- JavaScript之发布-订阅模式
- ZeroMQ:订阅-发布模式的java程序示例
- 设计模式---订阅发布模式(Subscribe/Publish)
- 设计模式---订阅发布模式(Subscribe/Publish)
- 设计模式——订阅发布模式
- 设计模式之发布/订阅模式
- java设计模式-观察者(发布-订阅)模式
- JS设计模式之发布订阅模式
- 浅谈JavaScript设计模式——观察者模式(发布订阅模式)
- jQuery的插件的写法
- 信鸽随笔
- ClassLoader
- Java笔记
- java笔记,File类
- Javascript设计模式-发布/订阅模式最小化的示例
- 线jsp版泰囧表情的生成器代码,不用PS也能恶搞。
- uuid
- 在iOS 8中使用UIAlertController
- Android 一个改善的okHttp封装库
- Android开发之getMeasuredWidth和getWidth区别从源码分析
- lua 算术类和关系类的元方法
- 1~N中随机选三个数,求其最大的 最小公倍数。
- Lucene学习总结二