08-シングルモード

2508 ワード

1、モード定義
単例モードは、単量体モードとも呼ばれ、一度だけインスタンス化できるオブジェクトクラスです.たとえば、オブジェクトを使用してネーミングスペースを計画し、オブジェクトのプロパティとメソッドをきちんと管理します.
単一のモデルは、JavaScriptで最も一般的な設計モデルかもしれません.このモードは、jQueryライブラリが単一のモードを使用してネーミングスペース$を提供するなど、ネーミングスペースを提供するためによく使用されます.単例モデルは、コード管理の優れた実践である.
2、単例モードで独立したネーミングスペースを提供する
//     (           )
var Xia = {
    g: function(id){
        return document.getElementById(id);
    },
    css: function(id,key,value){
        this.g(id).style[key] = value;
    },
    attr: function(id,key,value){
        this.g(id)[key] = value;
    },
    html: function(id,type,fn){
        this.g(id)['on'+type] = fn;
    }
}

3、単例モードはモジュールをもっとはっきりさせることができる
シングル・インスタンス・モードは、独立したネーミング・スペースのほか、コード・ライブラリ内の複数のモジュールを管理するために使用できます.
//           :    
baidu.dom.addClass    //      
baidu.dom.append      //     
baidu.event.stopPropagation
baidu.event.preventDefault
baidu.string.trim
baidu.string.encodeHTML
//      ,      
var A = {
    Util: {
        util_method1: function(){},
        util_method2: function(){}
    },
    Tool: {
        tool_method1: function(){},
        tool_method2: function(){}
    },
    Ajax: {
        get: function(){},
        post: function(){}
    },
    Others: {
        // ...
    }
}

//        
A.Util.util_method2();
A.Ajax.get();

4、静的変数(変更不可変数)を一例モードで実現する
JavaScript言語ではstatic静的変数は提供されていません.したがって,理論的にはすべてのJavaScript変数を修正することができる.コード例については,静的変数機能を実現し,これらの変数はアクセスのみで修正できないようにした.
//            
var Conf = (function(){
    //          ,         
    var conf = {
        MAX_NUM: 1000,
        MIN_NUM: 1,
        COUNT: 500
    };
    //       
    return {
        get: function(name){
            return conf[name] ? conf[name] : null;
        }
    }
    //   setter   ,           ,           
})();

//   
var count = Conf.get('COUNT');
console.log(count);

5、不活性単例
単一のインスタンスオブジェクトの作成を遅延させる必要がある場合があるため、単一のインスタンスモードでは、単一のインスタンスの作成を遅延させる形式、すなわち「不活性な単一のインスタンス」も存在する.
//        、     
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);

终わります!