はじめに:継続的な学習は、プログラマの運命であります
A、シングルトン
いわゆるシングルトンデザインパターンは、ある特定の方法は、その全体ソフトウェアシステム、唯一のクラスのオブジェクトのインスタンスの存在を確保取ること、およびクラスは、オブジェクトのインスタンスを取得するための唯一の利用可能な方法(静的メソッド)です。このようなHibernateのSessionFactoryのように、プロキシデータ貯蔵源として機能し、セッションオブジェクトを作成するための責任があります。SessionFactoryの軽量ではありません
8通り以下のシングルトン:
第二に、飢えた男のタイプ(静的定数)
パブリック クラスSingleton01 { // 現在のクラスオブジェクトの内部で作成されたインスタンス 専用最終静的 Singleton01インスタンス= 新しい新しいSingleton01(); // コンストラクタ民営化ではなく、外部新しい新しい プライベートSingleton01(){} //は、パブリック静的メソッドを提供するには、オブジェクトのインスタンスを返します プライベート 静的Singleton01のgetInstance(){ 戻りインスタンス; } パブリック 静的 ボイドメイン(文字列[]引数){ // テスト Singleton01インスタンス1 = Singleton01.getInstance(); Singleton01 instance2で = Singleton01.getInstance()。 システム。 OUT.println(インスタンス1 == instance2で)。 システム。アウト.println(instance1.hashCode()); システム。アウト.println(instance1.hashCode()); } }
分析:
(1)利点:このようなアプローチローディングが完了したとき、クラスがインスタンス化される、すなわち、比較的簡単です。スレッドの同期の問題を回避するには。
(2)短所:インスタンス化が完了すると、クラスのロード、遅延ロードの効果を達成しません。あなたが最初から最後まで、この例を使用したことがない場合は、メモリの無駄になります
第三に、式飢餓(静的コードブロック)
パブリック クラス{Singleton02 // このクラス内のオブジェクトのインスタンスを作成する プライベート 静的Singleton02インスタンス; // コンストラクタ民営化ではなく、外部新しい新しい プライベートSingleton02を(){} // 静的コード・ブロックを作成シングルトンの 静的{ インスタンス = 新しい新Singleton02(); } //は、パブリック静的メソッドを提供し、オブジェクトのインスタンスを返す パブリック 静的Singleton02のgetInstance(){ 戻りインスタンス; } パブリック 静的 ボイドメイン(文字列[]引数){ // テスト Singleton02インスタンス=Singleton02.getInstance(); Singleton02 instance2で = Singleton02.getInstance()。 システム。アウト .println(例えば== instance2で)。// 真の システム。アウト .println(" instance.hashCode = " + instance.hashCode())。 システム。アウト .println(" instance2.hashCode = " + instance2.hashCode())。 } }
分析:
(1)このようにと方法と同様に、クラスのプロセスは、静的コードブロックにインスタンス化されることを除いて、上記ロードされた場合、コードが静的なコードで実行され、クラスのインスタンスを初期化します
(2)結論:シングルトンメソッド利用可能な、しかし、無駄なメモリをもたらすことができます