03.Javascript设计模式之单例模式----Singleton
本文主要探讨Javascript中设计模式之一:单例模式(Singleton)
J2EE中的单例模式
众所周知,单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。在J2EE的设计模式中,单例模式有懒汉式和饿汉式之分,下面先看看这两种单例模式的表现形式
-
懒汉式的单例模式
Java Codepublic class Singleton { private Singleton { } private static Singleton _singleton = null; public static Singleton getInstance(){ if(_singleton == null){ _singleton = new Singleton(); } return _singleton; } //Properties can be defined here! private String _name; public String getName(){ return this._name; } public void setName(String _sName){ this._name = _sName; } }
-
饿汉式的单例模式
Java Codepublic class Singleton { private Singleton { } private static Singleton _singleton = new Singleton(); public static Singleton getInstance(){ return _singleton; } //Properties can be defined here! private String _name; public String getName(){ return this._name; } public void setName(String _sName){ this._name = _sName; } }
-
单例的获取 针对如上两种形式的单例模式,我们可以这样获得其实例:
Singleton mySingleton = Singleton.getInstance(); mySingleton.setName("赵先烈"); System.out.println(mySingleton.getName()); //output:赵先烈
Javascript中的单例模式
在Javascript中,有很多种方式可以模拟单例模式,在这里,我采用如下的方式来模拟,模拟之不当,还请指教
-
懒汉式的单例模式
Javascript Codevar Singleton = (function(){ var _SingletonClass = function(){ //Other code can be write here! }; var _singleton = null; var _getInstance = function(){ if(!_singleton){ _singleton = new _SingletonClass(); } return _singleton; }; //Properties can be defined here! var _name = null; var _getName = function(){ return _name; }; var _setName = function(_sName){ _name = _sName; };
})();
_SingletonClass.prototype = { getName: _getName, setName: _setName }; return { getInstance: _getInstance }; -
饿汉式的单例模式
Javascript Codevar Singleton = (function(){ var _SingletonClass = function(){ //Other code can be write here! }; var _singleton = new _SingletonClass(); var _getInstance = function(){ return _singleton; }; //Properties can be defined here! var _name = null; var _getName = function(){ return _name; }; var _setName = function(_sName){ _name = _sName; }
})();
_SingletonClass.prototype = { getName: _getName, setName: _setName }; return { getInstance: _getInstance }; -
单例的获取 针对如上的两种形式,Javascript中的单例可以这样获得:
var mySingleton = Singleton.getInstance(); mySingleton.setName("赵先烈"); alert(mySingleton.getName()); //output:赵先烈
总结
本文主要通过与Java对比的形式来模拟Javascript中的单例模式,是为了让人更明白在Javascript中,单例模式是什么,如何实现。仅此而已。