Androidが単例モードを作成するいくつかの方法

3261 ワード

JAvaモードの単例モード:単例モードは、クラスが1つのインスタンスしかないことを保証し、自分でこのインスタンスを提供し、システム全体にこのインスタンスを提供します.特徴:1、1つのクラスには1つのインスタンスしかありません2、自分でこのインスタンスを作成します3、システム全体がこのインスタンスを使用します
Singletonモードの主な役割は、JavaアプリケーションでクラスClassが1つのインスタンスしか存在しないことを保証することです.多くの操作では、ディレクトリ・データベース接続の確立など、このような単一スレッド操作が必要です.一部のリソースマネージャは、単一のモデルとして設計されることが多い.外部リソース:たとえば、各コンピュータに複数のプリンタがありますが、Printer Spoolerは1つしかありません.2つの印刷ジョブが同時にプリンタに出力されないようにします.各コンピュータにはいくつかの通信ポートがあり、システムは、1つの通信ポートが2つの要求によって同時に呼び出されないように、これらの通信ポートを集中的に管理しなければならない.内部リソース、例えば、ほとんどのソフトウェアには、システム構成を格納する1つ(または複数)のプロパティファイルがあります.このようなシステムは、1つのオブジェクトによってこれらのプロパティファイルを管理する必要があります.
例:Windowsごみ箱.ウィンドウシステム全体では、リサイクルステーションには1つのインスタンスしかありません.システム全体がこの唯一のインスタンスを使用し、リサイクルステーションは独自のインスタンスを提供します.従って、回収局は、単一のモードの応用である.
2つの形式:1,餓漢式単例類
  public
  class   Singleton {     private
  Singleton(){}     // , ? // private     private
  static   Singleton instance =  new   Singleton();     // class , public
  static   Singleton getInstance() { return
  instance; } }
 
 
2、怠け者式単例類public
  class   Singleton {     private
  static   Singleton instance = null;     public
  static   synchronized Singleton getInstance() {     // , , // , ! if
  (instance==null) instance= new
  Singleton(); return
  instance;   }     }
 
 
第2の形式はlazy initialization,すなわち1回目の呼び出し時に初期Singletonとなり,以降生成されなくなる.
lazy initialization形式のsynchronizedに注意してください.このsynchronizedは重要です.synchronizedがなければgetInstance()を使用すると、複数のSingletonインスタンスが得られる可能性があります.一般的に1つ目は安全です
私自身がよく使う方法:public
  class   Singleton {     private
  volatile   static   Singleton singleton;     private
  Singleton(){}     public
  static   Singleton getInstance(){     if (singleton==null){     synchronized(Singleton. class ){     if (singleton==null){     singleton= new
  Singleton();     }     }     }     return
  singleton;     }     }