Javaコードは、一般的なデザインパターンと理解を使用しています
A、シングルトン
1.空腹中国風(あまりにも空腹、クラスのロードインスタンスを作成します)
/ ** シングルモード飢え*例 * / パブリック クラスHungrySingleInstance { // ローダークラスのインスタンス生成された 民間 最終 静的の HungrySingleInstanceインスタンス= 新しい新しいHungrySingleInstanceを(); // 引数なしでpublicクラスのデフォルトコンストラクタがありますので、したがって、プライベートとそれを覆う プライベートHungrySingleInstance(){} // このメソッドは、オブジェクト・クラス・ローディングシングルトンリターン生成、起動された パブリック 静的HungrySingleInstanceのgetInstance(){ 戻りインスタンス; } }
それはマルチスレッドセーフでは存在しないので、いわゆる飢えた男、単一のデザインパターンは、それがすでにJVMで作成したクラスのロードされたインスタンスであるとき、それを意味し、クラスのメンバ変数として、クラスの静的インスタンスです問題。
しかし、インスタンスの事前の初期化や構造、このインスタンスではなく、使用する場合、それは資源の無駄が発生しますされています。
2.タイプ怠惰(遅延、インスタンスを作成するためのイニシアチブを取ることはありません、最初の呼び出しは、のみ作成する場合)
/ ** *例レイジーシングルモード * / パブリック クラスLazySingleInstance { // 参照がnullクラスローダインスタンスであるときに発生する プライベート 静的 LazySingleInstanceインスタンス= NULL ; // 引数なしでパブリッククラスデフォルトコンストラクタがあるため、それほどプライベートとそれを覆う プライベートLazySingleInstance(){ } パブリック 静的{)のgetInstance(LazySingleInstance // 例は、この例を直接返し、空でない場合 のiF(ヌル == インスタンス){ // ロック+決意、複数の回避を上記の判断によるスレッド、複数のインスタンスを作成し、原因の安全性の問題 同期(LazySingleInstance。クラス){ //最初の変調方式は、インスタンスを作成する IF(ヌル == インスタンス){ インスタンス = 新しい新しいLazySingleInstance(); } } } 戻りインスタンス; } }
効率性と安全性に対処しながら、上の怠惰なモードのシングル例。
次のシナリオで使用されるSingletonパターン:
1.オブジェクトを作成し、多くの場合、破壊されました。
2.リソースを大量に消費する必要はなく、頻繁に使用するオブジェクトを作成します。
3.オブジェクトは、データベースやファイルにアクセスするために使用されます。
第二に、工場出荷時のパターン
1.シンプルなファクトリパターン
例:SMSメッセージを送信するための簡単なファクトリパターン。
/ ** * SMSメッセージまたは送信するための送信インタフェース * / パブリック インターフェイスを送信{ ボイド送信(); }
/ ** *メッセージ送信クラスが実装インタフェース、電子メールて送信 * / パブリック クラスメール実装送信{ @Override 公共 無効送信(){ System.out.printlnは(「このIS Aメールメッセージ!」); } }
/ ** *送信SMSクラスが実装インタフェース * / パブリック クラス SMSの実装を送る{ @Override 公共 無効送信(){ System.out.printlnは( "このSMSのIS Aメッセージ!" ); } }
/ ** *送信ファクトリクラス * / パブリック クラスSendFactory { / ** *異なるタイプパラメータ、異なるオブジェクトの製造の例は、 * @paramのタイプ * @return * / パブリック送信プロデュース(MessageSenderType型){ IF (MessageSenderType.SMS .equals(タイプ)){ 戻り 新しい新しいSMSの(); } そう IF (MessageSenderType.MAIL.equals(タイプ)){ 戻り 新しい新)(メール; } 戻り NULL ; } }
/ ** *タイプは、列挙クラス送られる * / パブリック 列挙MessageSenderType { //はSMS SMS、 // メールボックスに メールを }
/ ** *工厂测试类 * / パブリック クラスFactoryTest { 公共 静的 ボイドメイン(文字列[]引数){ SendFactory工場 = 新しいSendFactory()。 factory.produce(MessageSenderType.SMS).send(); factory.produce(MessageSenderType.MAIL).send(); } }
あなたがソースコードを変更したい製品を高める必要性が、OCPの原則を弱体化させるシンプルなファクトリパターン(拡張のためのオープン、修正のため閉鎖)。
2.ファクトリメソッドパターン
単純なファクトリパターンと同様のパターンを有するファクトリメソッドは、ファクトリクラスファクトリメソッド、メソッドの複数のパターンは、各メソッドは、対応するオブジェクトを生成するために使用されることを除いて。単に工場モードは、1つのアプローチでは、異なるパラメータはまた、異なるオブジェクトの生産に渡されます。だから、その限界は同じです。
3. Abstract Factoryパターン