デザインパターン自体は非常に理解されていないが、実際には、我々はこれらのデザインパターンを使用することですべての時間を持って、Javaは23個のデザインパターンと6つの原則があります。
デザインパターンは、コードの設計経験の概要をカタログした後、ほとんどの人に知られている使用し、繰り返されるように設定されています。コードの信頼性プログラムの再利用性を確保するために、他人を理解し、コードをより簡単に、再利用可能なコードにデザインパターンを使用してください。
含まれています
:、5つのカテゴリーの合計スキーマを作成しシングルトン、Factory Methodパターン、Abstract Factoryパターン、Builderパターン、プロトタイプモデルを。
構造モデル、7種類の合計:アダプタモード、装飾的なモード、プロキシモード、外観モード、ブリッジモード、組み合わせモード、フライ級。
行動パターン、11種類の合計:Strategyパターン、モードを説明するためのテンプレートメソッドパターン、オブザーバーモード、イテレータパターン、責任のチェーン・モード、コマンドモード、メモモード状態モード、ビジターパターン、仲介モデル。
私たちは今日、当社の生成に関するパターンことを懸念しています
シングルトンは: Javaのデザインパターンで最も簡単なの一つです。これは、オブジェクトを作成するための最良の方法を提供します。
このモデルは、単一のオブジェクトが作成されていることを保証しながら、独自のオブジェクトを作成するための責任がある単一のクラスが含まれます。このクラスは、直接アクセスできるオブジェクト、オブジェクトクラスのインスタンスにアクセスするための唯一の方法を提供します。
我々はジャガイモを食べるのと同じように、それで一つだけのジャガイモ、あなたが彼に電話ジャガイモ、彼はまたポテトであってもよいこと、また、ポテトと呼ばれるが、最終的にそのポテトをSingletonパターンを一つの他の方法を覚えておくこと。
注意:
1、一つだけシングルトンクラスのインスタンス。
2、シングルトンクラスには、独自のインスタンスを作成する必要があります。
3、シングルトンクラスは、他のすべてのオブジェクトにこの例を提供しなければなりません。
コードの実装:
シングルモードを飢え例:
パッケージのシングル、 パブリック クラスCarBean { 公共の 静的 CarBean CarBean = 新新CarBean(); プライベート文字列名; パブリック文字列のgetName(){ 返す名前を; } パブリック 無効のsetName(文字列名){ この .nameの= 名; } // 閉じた構成新しいオブジェクト予防する方法 プライベートCarBean(){ のSystem.out.printlnは( "一度だけCarBeanコンストラクタ行く" ); } パブリック 静的のgetInstance(){CarBean リターン CarBeanと、 } }
パッケージのシングル、 パブリック クラスMainTest { / ** シングル実施の形態を飢え*静的定数 *長所:JVMの負荷クラスの文言それがインスタンス化されるとき、スレッドは同期の問題を回避 *短所:クラスのロードそれがインスタンス化されるとき、効果が無駄にメモリを生じる、遅延負荷に到達しなかった * @paramの引数 * / パブリック 静的 ボイドメイン(文字列[]引数){ CarBean CAR1 = CarBean.getInstance(); CarBean CAR2 = CarBean.getInstance() ; car1.setName( "ランボルギーニ" ); car2.setName( "マセラティ" ) のSystem.out.println(car1.getName()); のSystem.out.println(car2.getName())。 } }
例怠惰なシングルモード(非同期):
パッケージSingle2 ,; パブリック クラスCarBean { パブリック 静的 CarBean CarBean = NULL ; プライベート文字列名; パブリック文字列のgetName(){ 戻り名; } 公共 ボイドのsetName(文字列名){ この .nameの= 名; } // 方法を防ぐ閉構成。新しいオブジェクト プライベートCarBean(){ System.out.printlnは( "一度だけCarBeanコンストラクタ行くには" ); } 公共の 静的なのgetInstanceを(){CarBean IF(CarBean == nullを){ carBean = 新しいCarBean()。 } 戻りcarBean。 } }
パッケージSingle2 ,; パブリック クラスMainTest { / ** *例怠惰なシングルモード:非同期 *利点:単一の実施形態、初期化呼び出し *短所:スレッドではない同期が推奨されていません * @param argsを * / パブリック 静的な 無効メイン(文字列[]引数){ CarBean CAR1 = CarBean.getInstance(); CarBean CAR2 = CarBean.getInstance(); car1.setName( "ランボルギーニ" ); car2.setName( "マセラティ" ) のSystem.out.println(CAR1 .getName()); のSystem.out.println(car2.getName()); } }
例えばレイジーシングルモード(同期):
パッケージシングル3; パブリック クラスCarBean { パブリック 静的 CarBean CarBean = NULL ; プライベート文字列名; パブリック文字列のgetName(){ 戻り名; } 公共 ボイドのsetName(文字列名){ この .nameの= 名; } // 方法を防ぐ閉構成。新しいオブジェクト プライベートCarBean(){ System.out.printlnは(「一度だけCarBeanコンストラクタ行く」); } / ** * 1 *全体的なプロセスを同期させる同期の全体スレッド同期方法を実現するために同期ロックモードを使用して同期が、高で同時原因の場合には、低ブロッキング効率は *推奨されません * @Return * / パブリック 静的 同期CarBean getInstance1(){ IF(CarBean == NULL ){ CarBeanは = 新しい新しいCarBean(); } 戻りCarBeanを; } / ** の実施例2のブロック*メソッドは同期用いた同期変更単一の実施形態;しかし、この方法は完全に同期されていない、複数のインスタンスをもたらすことができる; *たとえば:あなたが最初の(lazySingletonが== null)の複数のインスタンスを生成する場合は、複数のスレッドが同時に入る作成 はお勧めしません* * @return * / パブリック 静的CarBean getInstance2(){ IF(CarBean == NULL ){ 同期(CarBean クラス){ CarBean = 新しい新しいCarBean(); } } 戻りCarBeanを; } / ** *方法3:一度ヌルwが再び問題に対処する場合、ダブルチェック方法チェック同期コードブロックが推奨 * / 公共 静的CarBean getInstance3(){ IF(CarBean == NULL ){ 同期(CarBean。クラス){ IF(CarBean == NULL ){ CarBean = 新しい新しいCarBean(); } } } 戻りcarBean。 } }
私はコードのコメントに書かれている具体的な利点と欠点。
各モデルは、後に再び書き込みます。