JavaScript設計モードの----単体(単例)モード


デザインモードのー-単体(一例)モード
1、紹介します
この章から、JavaScriptで使われている様々な設計パターンの実現を紹介します.ここでは、モデル自体の理論をあまり紹介しないで、実現に注目します.OKです.正式に始まります.
従来の開発エンジニアの目には、一例として一つの種類が一例しかないということを保証し、実現する方法は一般的にインスタンスが存在するかどうかを先に判断し、直接リターンがあれば、存在しないならば作成して戻ってきます.JavaScriptでは、単に名前空間プロバイダとして、グローバル名前空間から唯一のアクセスポイントを提供して、このオブジェクトにアクセスします.
2、単量体と閉鎖単体
JavaScriptには、単例を実現する方法がたくさんあります.その中で最も簡単なのは対象の字面量を使う方法です.その字面量には多くの属性と方法が含まれています.

<html>
<head>
    <meta name="name" content="content" charset="utf-8">
    <title>javascript    title>
head>
<body>
    <script>
    //    (sigleton)--  new();          

    /*1、    --        */
/*  var Sigleton ={
       attr1 : true,
       attr2 : 10,
       method1: function(){
       alert("    1");
},
method2 : function(){
    alert("    2");
}
    };
    alert(Sigleton.attr1);

    //             ,          
    var BHX =BHX || {};
    BHX.Sigleton ={
        attr1 : true,
attr2 : 10,
method1: function(){
alert("    1");
},
method2 : function(){
    alert("    2");
}
    };
    BHX.Sigleton.method1();*/


    /*2、    ---        (       :    )*/
    //    --        

 /*     (function test(){
            alert(11);
        })()*/

    var BHX = BHX || {};
    BHX.Sigleton2=(function(){
    //                     ,      。  return        。
        var a1 = true;
        var a2 = 10;
        var f1 = function(){
            alert("function f1");
        };
        var f2 = function(){
            alert("function f2");
        };

        //             Sigleton2,  return  。
        return{
            attr1 : true,
    attr2 : 10,
    method1: function(){
    return f1();
    },
    method2 : function(){
        return f2;
    }

    };

    })();

    alert(BHX.Sigleton2.attr1);
    BHX.Sigleton2.method1();

    script>
body>
html>
上のコードはいいですが、使う時だけ初期化するとしたら、どうすればいいですか?資源を節約する目的のために、もう一つのコンストラクションでこれらのコードを初期化できます.
3、不活性単量体と分岐単量体

<html>
<head>
    <title>javascript     2title>
head>
<body>
<script>
    /*3、    ---(             )                 ,         ,           */
    //    
    var BHX = BHX || {};
    BHX.Base =(function(){

        //                
        var uniqueInstance; //undefined

        //       init         
        function init(){
            var a1 = true;
            var a2 = 10;
            var f1 = function(){
                alert("function f1");
            };
            var f2 = function(){
                alert("function f2");
            };

            return{
                attr1 : true,
                attr2 : 10,
                method1: function(){
                    return f1();
                },
                method2 : function(){
                    return f2;
                }

            };
        };


        return {
            getInstance:function(){
                if (!uniqueInstance) { //     ,       
                    uniqueInstance =init();
                };
                return uniqueInstance;
            }

        };
    })();

    //BHX.Base.getInstance().method1();

    /*4、    -- swich  if else  ,                 */

    var Ext =Ext ||{};
    var diff = true;

    Ext.More =(function(){
        var ObjA={          //     
            //  1
            attr1:"    1"
            //  2
            //  1
            //  2
        };
        var ObjB={
            //  1
            attr1:"IE  1"
            //  2
            //  1
            //  2
        };
        return (diff)? ObjA : ObjB;
    })();
    alert(Ext.More.attr1);

script>
body>
html>
一例ではどうやって実現されたか分かりましたが、一例ではどのようなシーンに使えばいいですか?実は、単一の例は一般的にシステム間の様々なモードの通信協調に用いられ、以下のコードは単一の例の最適な実践である.
4、ベストプラクティス
var SingletonTester = (function () {

    //  :            
    function Singleton(args) {

        //  args            (        )
        var args = args || {};
        //  name  
        this.name = 'SingletonTester';
        //  pointX  
        this.pointX = args.pointX || 6; //         ,        
        //  pointY  
        this.pointY = args.pointY || 10;

    }

    //    
    var instance;

    var _static = {
        name: 'SingletonTester',

        //       
        //  Singleton   
        getInstance: function (args) {
            if (instance === undefined) {
                instance = new Singleton(args);
            }
            return instance;
        }
    };
    return _static;
})();

var singletonTest = SingletonTester.getInstance({ pointX: 5 });
console.log(singletonTest.pointX); //    5 
5、その他の実現方式
参考可視ブログ:(http://www.cnblogs.com/TomXu/archive/2012/02/20/2352817.html)