JAVAのデザインパターン---シングルトン記事

シングルトン(シングルトン):JAVAは、作成したスキーマに属する、最もシンプルなデザインパターンです。いわゆる単一の実施形態、及びプログラム全体がインスタンスを1つだけ有します。

特長

  コンストラクタの民営化

  このクラスでは、本のようにオブジェクトのクラス属性をインスタンス化します

  この方法でクラスオブジェクトへの外部アクセスを提供します

飢えタイプ:オブジェクトのクラスローダをロードします

シナリオ:小さなオブジェクト、頻繁に、同時実行性の高いです

特長:より一般的に、スレッドセーフな、しかし無駄になりやすい、パフォーマンスに影響を与える、スタートの初期化ので。

1  クラスシングルトン{
 2      // コンストラクタ民営化
3。     プライベートシングルトン(){
 4          のSystem.out.println(「コンストラクタ」);
 5      }
 6      // クラスがロードされるときにオブジェクトが初期化される
。7      プライベート 静的 最終   シングルトンインスタンス= 新しい新しいシングルトン();
 8          // 外部アクセス方法提供する
。9      パブリック 静的シングルトンのgetInstance(){
 10          リターンインスタンス;
 11      }
 12です }

レイジースタイル:必要なときにオブジェクトが作成され、スレッドセーフ

シナリオ:シングルスレッド、ラージオブジェクト

特長:危険な遅延初期化を通します。

1  クラスシングルトン{
 2      プライベートシングルトン(){
 3          のSystem.out.println( "构造方法" )。
4      }
 5      プライベート 静的シングルトンインスタンス。
6      パブリック 静的  シングルトンのgetInstance(){
 7          であれば(例えば== NULL ){
 8              インスタンス= 新しいシングルトン()。
9          }
 10          リターンインスタンス。
11      }
 12 }

同期ロック機構

シナリオ:マルチスレッド、大きなオブジェクト、まれに使用。

特長:スレッドの安全性を確保するためにロックすることによって、パフォーマンスが低下します。

1  クラスシングルトン{
 2      プライベートシングルトン(){
 3          のSystem.out.println(「コンストラクタ」);
 4      }
 5。     プライベート 静的シングルトンインスタンス;
 6      // 同期方法は、スレッドセーフが、パフォーマンスが低下するであろう
。7      パブリック 静的 同期シングルトンのgetInstance (){
 8。         IF(例えば== NULL ){
 9。              インスタンス= 新しい新しいシングルトン();
 10          }
 11          リターンインスタンス;
 12である     }
 13です }

二要素認証

シナリオ:ラージオブジェクト、まれで、量によって複雑には大きすぎではありません

特長:スレッドセーフ、遅延初期化。

1  クラスシングルトン{
 2      プライベートシングルトン(){
 3          のSystem.out.println(「コンストラクタ」);
 4      }
 5。     プライベート 静的 揮発性のシングルトンインスタンス;
 6      // 同期方法、二要素認証、性能を改善するために、ブロックの数を減らす
。7      パブリック スタティックgetInstanceシングルトン(){
 8          IF(例えば== NULL ){
 9              同期(シングルトン。クラス){
 10                  IF(例えば== NULL ){
 11                      インスタンス= 新しい新シングルトン();
12                  }
 13              }
 14          }
 15          リターンインスタンス。
16      }
 17 }

静的な内部クラス

リファレンスシナリオ:大規模なオブジェクト、頻繁に、同時実行性の高いです

特長:遅延オブジェクトの作成、リソースの消費量を削減、システムのパフォーマンスを向上させます

1  クラスシングルトン{
 2      プライベートシングルトン(){
 3          のSystem.out.println( "构造方法" )。
4      }
 5つの     静的 クラスインナー{
 6          プライベート 静的 最終   シングルトンインスタンス= 新しいシングルトン()。
7      }
 8      パブリック 静的シングルトンのgetInstance(){
 9          リターンInner.instance。
10      }
 11 }

数え上げます

1つの 列挙シングルトン{
 2      // クラスローダ作成
3。     INSTANCE;
 4 }

Singletonパターンは、スキーマを作成することですので、それぞれの呼び出しは、新しいインスタンスを作成します。だから、重要な問題は、デシリアライズされます。インスタンスにデシリアライズするとき、インスタンスがファイルに書き込まれるとき、私たちはオーバーライドする必要があるreadResolveインスタンスを一意にするための方法を。

1  プライベートオブジェクトはreadResolve()はスローObjectStreamException {
 2          戻りシングルトンを、
3 }

 

おすすめ

転載: www.cnblogs.com/shi-zhe/p/11609650.html