クラスのインスタンスを1つだけ確実にするために、それがグローバルアクセスポイントを提供します:「デザインモードを研磨」の定義。
シングルトンの性質がある - インスタンスの数を制御します。
I.はじめに
1、シングルトンパターンは、比較的単純な、従来のタイプであり、怠惰な空腹男2を有しています。
次のように怠惰な式は次のとおりです。
パッケージシングルトン。 パブリック クラスSingleton1 { プライベート 静的 Singleton1インスタンス= NULL ; プライベートSingleton1(){ } パブリック 静的Singleton1のgetInstance(){ 場合(例えば== NULL ){ インスタンス = 新しいSingleton1()。 } 戻りインスタンス。 } }
名前が示すように、クラスを作成するために使用されるまで待つとき怠惰な人のクラスローディング、シングルトンオブジェクトのインスタンスが作成されません。
2、次の式を飢え:
パッケージシングルトン。 パブリック クラスSingleton2 { プライベート 静的 Singleton2インスタンス= 新しいSingleton2()。 プライベートSingleton2(){ } パブリック 静的Singleton2のgetInstance(){ 戻りインスタンス。 } }
それは空腹の男のスタイルがロードされたクラスのインスタンスなので、それぞれの使用を作成する必要はありませんが作成されます。
式を飢え怠惰なタイプは、単一のクラスの処理における春のApplicationContextたBeanFactoryの実施形態との相違点です。
あなたがオブジェクト、判断の複数回すべてのステップを作成するときに3は、怠惰な人間のシングルトンは、スレッドセーフではないので、あなたがスレッドの安全性を確保したい、離れて外のインスタンスを作成します同期方法の増加から、もちろん、それは、最も簡単ですオブジェクトが既に存在するかどうかを判断します。
第二に、エレガント実現
しかし、「グラインドデザインモードでは、」遅延初期化のホルダークラスモードと呼ばれるスレッドセーフ怠惰な人間シングルトンを確保するために、優雅なの一つでJavaを導入しました。次のように:
パッケージシングルトン。 パブリック クラスSingleton3 { プライベートSingleton3(){ } プライベート 静的 クラスSingletonHolder { プライベート 静的 Singleton3インスタンス= 新しいSingleton3()。 } パブリック 静的Singleton3のgetInstance(){ 戻りSingletonHolder.instanceと、 } }
静的な内部クラスのクラスは、実際にトップレベルのクラスでは、外側のクラスのインスタンスに依存することはできません、それは静的メンバ変数の一種のようなものです、が存在します。使用のみで、その内部変数をインスタンス化されます。レイジー初期ホルダークラスモデルは、JVM自身の特性の使用は、スレッドの安全性を保証します。
ます。https://www.cnblogs.com/zrtqsk/p/3618616.htmlで再現