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中,單例模式是什麼,如何實現。僅此而已。