js 模式设计之单例
2012-07-17 18:56
253 查看
Javascript中单例模式的实现方式有多种,每一种都有自身的优点或缺点。
1,对象直接量实现最基本,最简单的单体
这种方式中,对象所有成员都通过Singleton加点号访问。所有成员是公开的,没有私有的。在执行到变量Singleton时,会加载(实例化)自身,即非惰性加载。
此外method1用this访问单体的其它成员会存在一些风险,因为method1的上下文不是总是指向Singleton对象。
比如当把method1作为事件监听器时,this可能指向的是dom元素,这时可能会提示undefined。
2,闭包实现私有成员的单体
这种方式中var定义私有的成员属性attr,方法fn,然后返回一个公开的接口method和getAttr。今后修改实现时,接口方法method和getAttr不变,只需修改私有的attr和fn的具体实现。使用如下:
3,闭包实现私有成员的惰性实例化单体
适用场合上面已经提到:对于那些必须加载大量数据的单体直到需要使用它的时候才实例化。使用方式是这样:
1,对象直接量实现最基本,最简单的单体
var Singleton = { attr1 : 1, attr2 : 'hello', method1 : function(){alert(this.attr2);}, method2 : function(arg){} }
这种方式中,对象所有成员都通过Singleton加点号访问。所有成员是公开的,没有私有的。在执行到变量Singleton时,会加载(实例化)自身,即非惰性加载。
此外method1用this访问单体的其它成员会存在一些风险,因为method1的上下文不是总是指向Singleton对象。
比如当把method1作为事件监听器时,this可能指向的是dom元素,这时可能会提示undefined。
2,闭包实现私有成员的单体
var Singleton = function(){ var attr = 1, fn = function(){}; return { method : function(){ fn(); }, getAttr : function(){ return attr; } }; }();
这种方式中var定义私有的成员属性attr,方法fn,然后返回一个公开的接口method和getAttr。今后修改实现时,接口方法method和getAttr不变,只需修改私有的attr和fn的具体实现。使用如下:
Singleton.method(); Singleton.getAttr();
3,闭包实现私有成员的惰性实例化单体
var LazySingleton = function(){ var attr = 1, fn = function(){}; var obj = { method : function(){ fn(); }, getAttr : function(){ return attr; } }; function init(){ return obj; } return {getInstace: init}; }();
适用场合上面已经提到:对于那些必须加载大量数据的单体直到需要使用它的时候才实例化。使用方式是这样:
LazySingleton.getInstance().method(); LazySingleton.getInstance().getAttr(); 转自:http://kb.cnblogs.com/page/97011/
相关文章推荐
- JS设计模式之构造函数模式
- JS设计模式-策略模式
- 【JS设计模式】命令模式
- js设计模式之惰性模式
- js 设计模式 第三章
- js设计模式与开发实践2
- JS设计模式之工厂模式
- JS设计模式——单例模式剖析
- JS设计模式之单例模式
- js设计模式--工厂模式
- 转载:js版本的设计模式
- js设计模式中发布与订阅实现观察者模式例子
- js架构设计模式——MVVM模式下,ViewModel和View,Model有什么区别
- 在使用Cocos2d-JS 开发过程中需要用到的单体设计模式
- 原型设计模式prototype-构造js自己定义对象
- js设计模式
- js 设计模式 第六章 chaining
- [js]04js设计模式02 原型链模式
- JS 设计模式之单例模式
- JS设计模式一:单例模式