js単一の例モードの詳細な解説例

11380 ワード

この文章は主に一例のパターンと使用シーンを紹介しています.3つの例を参考にしてください.
単例とは何ですか
単一の例は、1つのクラスがあり、1つのインスタンスだけが必要であり、全体的なアクセスポイントを提供する.したがって、従来のコントローラをバイパスして、使用者に使用させることができるようにします.いくつかの例に関係なく使用しています.これは設計者の責任です.
In JavaScript, Singletons serve as a shared resource namespace which isolate implementation code from the global namespace so as to provide a single point of access for functions.
javascriptでは、一例をグローバルの名前空間として利用し、そのオブジェクトにアクセスするポイントを提供する.
使用シーン
In practice, the Singleton pattern is useful when exactly one object is needed to coordinate others across a system. 
単一の例の比較は、オブジェクトと他のシステムとの相互作用に適しています.
類比
一つのグループの組長に似ています.しばらくの間には組長が一人しかいません.組員の仕事、割り当てと調整と組員の仕事を指定するグループ長がいます.
例1:これは最も簡単な一例であり、key、valueの形式で属性と方法を記憶する.
 
  
var A = {
   xx:3,
   yy:4,
   B:function(el){

   },
   C:function(el){

   },
   D:function(el){

   },
   E:function(el){

   }
}
2:まず の を し、このインスタンスが するかどうかを し、 しない は し、 しない はそのまま します.
var mySingleton = (function () {
 

// Instance            
var instance;

function init() {

// Singleton

//         
function privateMethod(){
    console.log( "I am private" );
}

var privateVariable = "Im also private";

return {

  //         
  publicMethod: function () {
    console.log( "The public can see me!" );
  },

  publicProperty: "I am also public"
};

};

return {

//
getInstance: function () {

  if ( !instance ) {
    instance = init();
  }

  return instance;
}

};

})();

var singleA = mySingleton;
var singleB = mySingleton;
console.log( singleA === singleB ); // true
3:
var SingletonTester = (function () {
  // options: an object containing configuration options for the singleton
  // e.g var options = { name: "test", pointX: 5}; 
  function Singleton( options )  {
    // set options to the options supplied
    // or an empty object if none are provided
    options = options || {};
    // set some properties for our singleton
    this.name = "SingletonTester";
    this.pointX = options.pointX || 6;
    this.pointY = options.pointY || ; 
  }
  // our instance holder 
  var instance;
  // an emulation of static variables and methods
  var _static  = {  
    name:  "SingletonTester",
    // Method for getting an instance. It returns
    // a singleton instance of a singleton object
    getInstance:  function( options ) {   
      if( instance  ===  undefined )  {    
        instance = new Singleton( options );   
      }   
        return  instance;      
    } 
  }; 
  return  _static;
})();
var singletonTest  =  SingletonTester.getInstance({
  pointX:  5
});
// Log the output of pointX just to verify it is correct
// Outputs: 5
console.log( singletonTest.pointX ); 
 
 
シングルモード
 
     モードは モードとも われていますが、 くは モードとも われています.ソフトウェアの の で に ですが、 もよく われているデザインの つです.
 
     はウィキペディアの モードについて します.
    の モードを する 、 の を するクラスは つのインスタンスだけの を しなければならない. くの 、システム は つのグローバルオブジェクトを つだけで、システム の を するのに である. えば、システム のプロファイルにおいて、 データの のオブジェクトが して み まれたり、 されたりして、 のオブジェクトがデータを する がある も、この のオブジェクトを して データを して することで、 な における を にすることができる.
    の のパターンの え は、クラスが1つのオブジェクトの ( に じ)を し、このインスタンスを る ( は、 にgetInstance を する)である.この を び すと、クラスが っている が でない は、その に ります.いいえの は、クラスのインスタンスを し、そのクラスが しているその にインスタンスを して します.このクラスのコンストラクタをプライベートな として し、 の がこのコンストラクタを してオブジェクトを することを し、このクラスの な だけでこのクラスの のインスタンスを る.
 
    JSにとっては、 な によって、 の のモードを できるようになり、プライベートデータをクローズド でシミュレートすることができます.
  • var single = (function(){
  • }
  •     var unique;

  •       get Instance(){
  • }
  •         if( unique === undefined ){
  • }
  •             unique = new Costruct();
  •         }
  •         return unique;
  •     }

  •       Costruct(){
  • }
  •         //... のコンストラクタを するコード
  •     }

  •     return {
  • }
  •         get Instance : get Instance
  •     }
  • )();
  •     、uniqueはオブジェクトの を します.get Instanceは の です.Contstructはインスタンスを するコンストラクターです.
        の は、single.getInstance()によって され、 び しごとに の が られます.これは のモードによって される です.
     
        しかし、JSにとって、 らかに の な はあまりにも で、 なるシーンで なる で モードを するのがJSの です.
        
         1: も な の
  • var シングルトン = {
  • }
  •         atr : 1,
  •         method : function(){ return this.atr; }
  •     }

  • var t 1 = シングルトン ;
  • var t 2 = シングルトン ;
  •     それは らかです.t 1==t 2です.
     
        に で、しかも に われているのは、パッケージ がないということです.すべての が されています. を う がある には、 が があり、 が りなくなります.もちろん、thisに する にも の があります.
     
     
         2:コンストラクタ
        のJS とは し ていますが、このクラスのインスタンスが に しているかどうかの を の に れます.
  • function Costruct(){
  • }
  •     // は
  • だけです.
  •     if( Costruct.unique !== undefined ){
  • }
  •         return Costruct.unique 
  •     }
  •     //その のコード
  •     this.name = 「NYF」
  •     this.age=「24」
  •     Costruct.unique = this;

  • var t 1 = new コンストラック() ;
  • var t 2 = new コンストラック() ;
  •     では、t 1==t 2もあります.
        に です.ただ つの を して するだけです.でもこの は がないので、 が でCostructのunique を したら、 のモードも されます.
        
         3:クローズド     
        フレキシブルブランドを っているJSにとっては、どんな でもn の えを つけることができます. で ってみます.ただ、 は にクローズドを ってシングルモデルを する をいくつか げます.つまり したシングルケースをキャッシュするだけです.
     
  • var single = (function(){
  • }
  •     var unique;
  •       Costruct(){
  • }
  •         //... のコンストラクタを するコード
  •     }

  •     unique = new Const();

  •     return unique;
  • )();
  •     var t 1=を します. single;var t 2=single;でいいです. の と ています.しかし、より な はもちろん、 ではありません.
        single()を び して うことを むなら、 のreturnを
        
        return function(){
            return unique;
        } 
        のようにnew で うこともできます.もちろんここでは、 にクローズドの をあげていますが、Costructでは、ケースがあるかどうかなどを してもいいです. な があります.それぞれの に わせて んでください.
     
    め りをつける
        としては、 モードは に モードの で であるが、 モードも よく われていて、 なモードである.
        であるかどうかは、インスタンスオブジェクトのクラス(JSはクラスの がないが)だけが であるかどうかを えてください.
        この は、データキャッシュを いて され、 が に されたかどうかを するための モードの な である.