單例模式的基本結構:
複製代碼 代碼如下:MyNamespace.Singleton = function() {
return {};
}();
比如: 複製代碼 代碼如下:MyNamespace.Singleton = (function() {
return { // Public members.
publicAttribute1: true,
publicAttribute2: 10,
publicMethod1: function() {
...
},
publicMethod2: function(args) {
...
}
};
})();
但是,上面的Singleton在代碼一載入的時候就已經建立了,怎麼消極式載入呢?想象C#裡怎麼實現單例的:)採用下面這種模式: 複製代碼 代碼如下:MyNamespace.Singleton = (function() {
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
// Control code goes here.
}
}
})();
具體來說,把建立單例的代碼放到constructor裡,在首次調用的時候再執行個體化:
完整的代碼如下: 複製代碼 代碼如下: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;
}
}
})();