Javascript设计模式-发布/订阅模式最小化的示例
2015-11-09 09:42
701 查看
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中使用的比较典型。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- PropertyChangeListener简单理解
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法