JAvascript設計モード--単例モード


シングル・スキーマ定義:クラスにインスタンスが1つしかないことを保証し、そのグローバル・アクセス・ポイントにアクセスします.単一モードシーン:スレッドプール、グローバルキャッシュブラウザのWindowsオブジェクトなど、1つだけ必要なオブジェクトがあります.1つの標準的な単一モードを実装するには複雑ではありません.変数を使用して、現在クラスにオブジェクトが作成されているかどうかを示すだけです.次のクラスのインスタンスを取得する場合、以前に作成したオブジェクトまたは
     var Singleton = function(name) {
        this.name = name;
    }
    Singleton.prototype.getName = function() {
        console.log(this.name)
    }
    Singleton.getInstance = (function(name) {
        var instance = null
        return function(name) {
            if(!instance) {
                instance = new Singleton(name)
            }
            return instance
        }
    })()
    var a = Singleton.getInstance('aa')
    var b = Singleton.getInstance('bb')
    console.log(a === b) // true

しかし、この方法はクラスの「不透明性」を増加させ、Singletonはこれが単一のクラスであることを知らなければならず、getInstance方法は不透明であり、consoleを印刷するときに知らなければならない.log(new Singleton('cc'))、結果は以下の通りです.
2、透明な単例モードの目的:このクラスを作成する時、他の普通のクラスを使うようにすることができる;例:ページに一意のdivノードを作成するCreateDiv単一クラスを作成します.ここではconsole.log(b)の場合、コンストラクション関数htmlの値は「marin」です.ここでは、クラスが1つのインスタンスしかないことを保証し、グローバルアクセスポイントを提供する単一のモード定義を明確にします.しかし、いくつかの欠点があります.判定されたフラグ変数instanceをカプセル化する前に,匿名関数(自己実行)と閉パッケージを用い,この匿名関数を真のSingleton構造方法に戻すことで,読みにくくなり,プログラムの複雑さvar CreateDiv=function(html){
if(instance) {
    return instance
}
this.html = html;
this.init();
return instance = this

}このコードのCreateDivのコンストラクション関数は、インスタンスオブジェクト(instance=this)を作成し、インスタンスif(instance)が1つしか使用されないことを保証する2つのことを実際に担当します.2、初期化init()を実行します.ここでもう1つの欠点(関数の単一の職責原則)もし私たちがある日このクラスを使用して、ページに複数のdivを作成する必要があるならば、つまりこのクラスを単例クラスから普通の複数のインスタンスを生産できるクラスに変えるには、CreateDiv構造関数を書き換え、制御を唯一のフラグ変数var instanceを作成することを排除しなければなりません.このような修正は不要な悩みをもたらす.
3、エージェントでシングル・インスタンス・モードを実現する.そうするとCreateDivを普通のクラスにし、divを作成するだけで、シングル・インスタンス・モードを実現し、ProxySingletonにシングル・インスタンス・モードを実現させる核心は、インスタンスが1つしかないことを確保し、グローバル・アクセスを提供することである.