1. 程式人生 > >js設計模式 第八章 單例模式

js設計模式 第八章 單例模式

單例模式:又稱單體模式,是隻允許例項化一次的物件類。有時也用一個物件來規劃一個名稱空間,井井有條地管理物件上的屬性和方法 。

名稱空間的管理員

防止變數或方法重複

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);