javascript的單例模式

單例模式是javascript最基本,最有用的模式之一,它提供了一種將代碼組織爲一個邏輯單元的手段,這個邏輯單元中的代碼經過單一的變量進行訪問。個人理解是在這個做用域中,只有經過單一的變量來訪問,不存在第二份。這樣的話,也能用來劃分命名空間,以減小全局變量的泛濫。javascript

一、對象直接量實現最基本、最簡單的單體java

var Singleton = {
    attr1 : 1,
    attr2 : 'hello',
    method1 : function(){alert(this.attr2);},
    method2 : function(arg){}
}

  這種方式中,對象全部成員都經過Singleton加點號來訪問,全部成員都是公開的,沒有私有的,在執行到變量Singleton時,會加載自身,即非惰性加載。閉包

二、閉包實現私有成員的單體this

var Singleton = function(){
    var attr = 1, fn = function(){};
    return {
        method : function(){ fn(); },
        getAttr : function(){ return attr; }        
    };  
}();

  這種方式中var定義私有的成員屬性attr,方法fn,而後返回公開的接口method和getAttr,從此修改實現時,接口方法就不用改變了,只須要修改私有的attr和fn的具體實現,這樣的話,只須要改一份,其餘地方都不須要改了。spa

三、閉包實現私有成員的惰性實例化單體對象

var Singleton = (function () {
var instantiated;
function init() {
/*這裏定義單例代碼*/
return {
publicMethod: function () {
console.log('hello world');
},
publicProperty: 'test'
};
}

return {
getInstance: function () {
if (!instantiated) {
instantiated = init();
}
return instantiated;
}
};
})();

/*調用公有的方法來獲取實例:*/Singleton.getInstance().publicMethod();
相關文章
相關標籤/搜索