javascript実現の単一例


紹介する
この章から、JavaScriptで使われている様々な設計パターンの実現を紹介します.ここでは、モデル自体の理論をあまり紹介しないで、実現に注目します.OKです.正式に始まります.
従来の開発エンジニアの目には、一例として一つの種類が一例しかないということを保証し、実現する方法は一般的にインスタンスが存在するかどうかを先に判断し、直接リターンがあれば、存在しないならば作成して戻ってきます.JavaScriptでは、単に名前空間プロバイダとして、グローバル名前空間から唯一のアクセスポイントを提供して、このオブジェクトにアクセスします.
本文
JavaScriptには、単例を実現する方法がたくさんあります.その中で最も簡単なのは対象の字面量を使う方法です.その字面量には多くの属性と方法が含まれています.
 mySingleton = {
    property1: "something",
    property2: "something else",
    method1:  () {
        console.log('hello world');
    }
};
今後オブジェクトを拡張する場合は、プライベートメンバとメソッドを追加して、これらの変数と関数宣言をカプセル化するためにクローズドを使用してください.暴露したいだけのpublicメンバーと方法は、サンプルコードは以下の通りです.
 mySingleton = ( () {

    
     privateVariable = 'something private';
     showPrivate() {
        console.log(privateVariable);
    }

    
     {
        publicMethod:  () {
            showPrivate();
        },
        publicVar: 'the public can see this!'
    };
})();


mySingleton.publicMethod();  console.log(mySingleton.publicVar);
上のコードはいいですが、使う時だけ初期化するとしたら、どうすればいいですか?資源を節約する目的のために、もう一つのコンストラクションでこれらのコードを初期化できます.
 Singleton = ( () {
     instantiated;
     init() {
        
         {
            publicMethod:  () {
                console.log('hello world');
            },
            publicProperty: 'test'
        };
    }

     {
        getInstance:  () {
             (!instantiated) {
                instantiated = init();
            }
             instantiated;
        }
    };
})();


Singleton.getInstance().publicMethod();
一例ではどうやって実現されたか分かりましたが、一例ではどのようなシーンに使えばいいですか?実は、単一の例は一般的にシステム間の様々なモードの通信協調に用いられ、以下のコードは単一の例の最適な実践である.
 SingletonTester = ( () {

         Singleton(args) {

                 args = args || {};
                .name = 'SingletonTester';
                .pointX = args.pointX || 6;                 .pointY = args.pointY || 10;

    }

         instance;

     _static = {
        name: 'SingletonTester',

                        getInstance:  (args) {
             (instance === undefined) {
                instance =  Singleton(args);
            }
             instance;
        }
    };
     _static;
})();

 singletonTest = SingletonTester.getInstance({ pointX: 5 });
console.log(singletonTest.pointX);