單例模式:又稱單體模式,是隻允許實例化一次的對象類。有時也用一個對象來規劃一個命名空間,井井有條地管理對象上的屬性和方法 。
命名空間的管理員
防止變量或方法重複
var ming={
g:function(id){
return document.getElementById(id);
},
css:function(id,key,value){
this.g(id).style[key]=value;
}
};
模塊分明
baidu.dom.addClass
baidu.dom.append
baidu.event.stopPropagation
baidu.event.preventDefault
baidu.event.trim
baidu.string.encodeHTML
無法更改的靜態變量
js是沒有static這類關鍵字,所以定義任何變量理論上do都可更改,所以在js中實現創建靜態變量變得很重要。
把變量定義在函數內部,通過特權方法訪問,不提供賦值變量的方法,只提供獲取變量的方法
var Conf=(function(){
//私有變量
var conf={
MAX_NUM:100,
MIN_NUM:1,
COUNT:1000
};
//返回取值器對象
return {
//取值器方法
get:function(name){
return conf[name]? conf[name] : null;
}
};
})();
var count=Conf.get('COUNT');
console.log(count);
惰性單例
有些時候對於單例對象需要延遲創建,所以在單例中還存在一種延遲創建的形式。
//惰性載入單例
var LazySingle=(function(){
//單例實例引用
var _instance=null;
//單例
function Single(){
//這裏定義私有屬性和方法
return {
publicMethod:function(){},
publicProperty:'1.0'
};
}
//獲取單例對象接口
return function(){
//如果爲創建單例將創建單例
if(!_instance){
_instance=Single();
}
return _instance;
};
})();
console.log(LazySingle().publicProperty);