JavaScript的單例模式 (singleton in Javascript)
更新時間:2010年06月11日 00:28:44 作者:
JavaScript的單例模式 (singleton in Javascript)
單例模式的基本結(jié)構(gòu):
MyNamespace.Singleton = function() {
return {};
}();
比如:
MyNamespace.Singleton = (function() {
return { // Public members.
publicAttribute1: true,
publicAttribute2: 10,
publicMethod1: function() {
...
},
publicMethod2: function(args) {
...
}
};
})();
但是,上面的Singleton在代碼一加載的時候就已經(jīng)建立了,怎么延遲加載呢?想象C#里怎么實現(xiàn)單例的:)采用下面這種模式:
MyNamespace.Singleton = (function() {
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
// Control code goes here.
}
}
})();
具體來說,把創(chuàng)建單例的代碼放到constructor里,在首次調(diào)用的時候再實例化:
完整的代碼如下:
MyNamespace.Singleton = (function() {
var uniqueInstance; // Private attribute that holds the single instance.
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
if(!uniqueInstance) { // Instantiate only if the instance doesn't exist.
uniqueInstance = constructor();
}
return uniqueInstance;
}
}
})();
復(fù)制代碼 代碼如下:
MyNamespace.Singleton = function() {
return {};
}();
比如:
復(fù)制代碼 代碼如下:
MyNamespace.Singleton = (function() {
return { // Public members.
publicAttribute1: true,
publicAttribute2: 10,
publicMethod1: function() {
...
},
publicMethod2: function(args) {
...
}
};
})();
但是,上面的Singleton在代碼一加載的時候就已經(jīng)建立了,怎么延遲加載呢?想象C#里怎么實現(xiàn)單例的:)采用下面這種模式:
復(fù)制代碼 代碼如下:
MyNamespace.Singleton = (function() {
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
// Control code goes here.
}
}
})();
具體來說,把創(chuàng)建單例的代碼放到constructor里,在首次調(diào)用的時候再實例化:
完整的代碼如下:
復(fù)制代碼 代碼如下:
MyNamespace.Singleton = (function() {
var uniqueInstance; // Private attribute that holds the single instance.
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
if(!uniqueInstance) { // Instantiate only if the instance doesn't exist.
uniqueInstance = constructor();
}
return uniqueInstance;
}
}
})();
您可能感興趣的文章:
- js單例模式的兩種方案
- JS實現(xiàn)單例模式的6種方案匯總
- javascript 單例模式演示代碼 javascript面向?qū)ο缶幊?/a>
- 輕松掌握J(rèn)avaScript單例模式
- [js高手之路]單例模式實現(xiàn)模態(tài)框的示例
- JavaScript設(shè)計模式之策略模式詳解
- javascript設(shè)計模式--策略模式之輸入驗證
- JavaScript設(shè)計模式之策略模式實例
- 學(xué)習(xí)JavaScript設(shè)計模式之策略模式
- 學(xué)習(xí)JavaScript設(shè)計模式(策略模式)
- javascript單例模式與策略模式實例詳解
相關(guān)文章
JavaScript為對象原型prototype添加屬性的兩種方式
為對象原型prototype添加屬性的的方法, 需要的朋友可以參考下。2010-08-08JavaScript面向?qū)ο笾o態(tài)與非靜態(tài)類
使用JavaScript面向?qū)ο笸耆鲇谂既唬驗榇蟛糠謺r間我都是在無圖形界面的環(huán)境下工作,有時候就算是介入了web客戶端的工作的時候,在寫js和ajax時,最多的也只是寫寫function,從沒有考慮過要使用JavaScript面向?qū)ο筮@么高級的技巧。2010-02-02JavaScript面向?qū)ο?極簡主義法minimalist approach)
荷蘭程序員 Gabor de Mooij 提出了一種比 Object.create ()更好的新方法,他稱這種方法為極簡主義法(minimalist approach)。這也是我推薦的方法2012-07-07

學(xué)習(xí)面向?qū)ο笾嫦驅(qū)ο蟮幕靖拍?對象和其他基本要素
學(xué)習(xí)面向?qū)ο笾嫦驅(qū)ο蟮幕靖拍?對象和其他基本要素
2010-11-11 
JavaScript面向?qū)ο蟪绦蛟O(shè)計三 原型模式(上)
在javaScript面向?qū)ο笤O(shè)計一和Javascript面向?qū)ο笤O(shè)計二中分別介紹了工廠模式和構(gòu)造函數(shù)模式,以及他們格式的優(yōu)缺點,今天繼續(xù)講解原型模式
2011-12-12