定義:シングルトンパターンの主な機能は、Javaアプリケーションでは、クラスの1つのインスタンスのみが存在することを保証することです。
ディレクトリデータベース接続の確立など、多くの操作では、このような単一の読み取り操作が必要です。
また、シングルトンは国家化することができます。たとえば、州のリポジトリとして複数のシングルトンクラスを提供することができます。 Singletonクラスは、この数字を安全に同期することで、このカウントを保持し、1を自動的に増やすことができます。
さらに、シングルトンも無国籍です。ツールのような機能を提供します。
Singletonモデルは、このように実装する可能性を提供します。 Singletonを使用する利点は、インスタンスの数を制限し、Java Garbage Collectionを助長するため、メモリを保存できることです。
ロードされたクラスは実際にリソースに属しているため、クラスローダーも工場モードでシングルトンモードで実装されていることがよくあります。
シングルトンモードの使用方法
一般的なシングルトンパターンには通常、いくつかの形式があります。
コードコピーは次のとおりです。
パブリッククラスシングルトン{
privatesingleton(){}
//自分の内部のインスタンスを定義するのは奇妙ではありませんか?
//これは内部呼び出しのみのプライベートであることに注意してください
Private Static Singleton Instance = new Singleton();
//ここにこのクラスへの外部アクセスのための静的な方法があり、直接アクセスできます
public static singleton getInstance(){
インスタンスを返す;
}
}
2番目のフォーム:
コードコピーは次のとおりです。
パブリッククラスシングルトン{
プライベート静的シングルトンインスタンス= null;
public static同期されたSingleton getInstance(){
//この方法は上記で改善されます。毎回オブジェクトを生成する必要はありません。
//使用中にインスタンスを作成し、効率を向上させます!
if(instance == null)
instance = new Singleton();
インスタンスを返す;
}
}
Singleton.getInstance()を使用して、Singletonクラスにアクセスできます。
上記の2番目のフォームは怠zyな初期化です。つまり、最初のシングルトンが初めて呼び出され、将来生成する必要はありません。
怠zyな初期化形式で同期することは重要であることに注意してください。ダブルチェックロック(DCL)に関する怠zyな初期化について多くの議論があり、それに興味がある人はそれをさらに研究します。
一般的に、最初のフォームはより安全であると考えられています。
Singletonモードを使用する際に注意すべきこと
場合によっては、Singletonを使用することは、EJBなどの分散システムで使用する場合、複数のSingletonオブジェクトが異なるクラスローダーによってロードされる場合があります。 -ServerおよびCross-JVM。
SunのPet Storeソースコード(Pet Store 1.3.1)のServiceLocatorを例として、簡単に分析しましょう。
ペットストアには、2種類のServiceLocatorがあり、1つはEJBディレクトリにあり、もう1つはこれらの2つのServiceLocatorsをチェックすると、コンテンツが類似しており、どちらもEJBクエリとクエリを提供します。ポジショニングサービスですが、なぜそれらを分離するのですか?これら2つのサービケロケーターを慎重に調査した後、違いがわかりました。ServicelocatorはWebでSingletonモードを採用し、ServiceLocatorはリソースポジショニングに属しているため、もちろん、Singletonモードを使用する必要があります。ただし、EJBでは、Singletonモデルが機能を失っているため、ServiceLocatorは2つのタイプに分割されます。1つはWebサービス用で、もう1つはEJBサービス用です。
Singletonパターンはシンプルに見え、使用するのが非常に便利ですが、Javaクラスのスレッドメモリやその他の概念をよく理解する必要があります。