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,餓漢式単例類
2、怠け者式単例類
第2の形式はlazy initialization,すなわち1回目の呼び出し時に初期Singletonとなり,以降生成されなくなる.
lazy initialization形式のsynchronizedに注意してください.このsynchronizedは重要です.synchronizedがなければgetInstance()を使用すると、複数のSingletonインスタンスが得られる可能性があります.一般的に1つ目は安全です
私自身がよく使う方法:
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;
}
}