また、デザインパターンとして知られているソフトウェアのデザインモード(ソフトウェアデザインパターン)は、カタログ作成、コードの設計経験の要約の後、ほとんどの人に知られ、繰り返し使用のセットです。これは、ソフトウェアの設計プロセスを繰り返し発生中の問題だけでなく、問題の解決策のいくつかを説明します。言い換えれば、それは特定の問題を解決するための一連のルーチンで、前任者のコード設計の経験をまとめたものである、一定の普遍性を持って、繰り返し使用することができます。その目的は、コードの再利用性、信頼性、可読性やコードを強化することです。
シンプルなファクトリパターン - 基本的な定義:
単純なファクトリパターンは、静的ファクトリメソッドとして知られており、スキーマを作成することです。単純なモデル工場では、渡された異なるパラメータに応じて、異なるクラスのインスタンスを返します。シンプルなファクトリパターンは、他のクラスのインスタンスを作成するために特化したクラスを定義し、これらのクラスは、共通の親クラスを持って作成されます。
特別な指示、単純なファクトリパターンデザインパターンは、それらの23種類の一種ではないですが、彼は工場出荷時のモデルの後ろだったとプライマーとして彼を教えするので、ここで、Abstract Factoryパターンのプロトタイプ。最初の研究の背後にある簡単な工場出荷時のパターンのヘルプを理解しています。
モード構造:
シンプルなファクトリパターン構成図のUML
パターン分析:
工場:工場の役割。具体的には渡された異なるパラメータに従って異なるクラスの具体例を返すメソッドを提供するクラス・ファクトリのインスタンスを作成するために使用されます。
製品:抽象製品の役割。親クラスのすべての製品のために。
ConcreteProduct:製品の特定の役割。
シンプルファクトリーモードは、オブジェクト自体がビジネスプロセスを分離オブジェクトを作成し、システムはそれらの両方を変更するのが比較的容易であるように、結合を低減することができます。将来の変更を実装する場合、あなただけがファクトリクラスをすることができ、変更する必要があります。
モードの例:
ゲストがお茶を購入したいがあり、彼は顧客のさまざまな味によると、セールスマン、お茶のカップを購入するセールスマンを見つけるために行ってきました、ケータリングスタッフがなどストッキング茶、みかん茶、として、次のものを見つけるために、セールスマンは、特定のお茶を行う方法については気にしません。 、クライアントの発注書の内容によれば、茶、および利き顧客を取得します。
滞在中は、お茶を買います
モードの概要:
利点
図1は、簡単な工場パターンは、オブジェクトを作成するための特別なファクトリクラスを提供するために、責任の分割を達成するために。
図2に示すように、クライアントは、いくつかの複雑なクラス名のために、簡単な工場のパターンは、ユーザメモリの量を減らすことができ、対応するパラメータをすることができ、特定の製品クラスを知っておく必要があります作成したクラス名、特定の製品カテゴリを知っている必要はありません。
図3は、プロファイルの導入により、あなたはどのような場合に、クライアントコードを新しいコンクリート製品クラスの交換や追加を変更し、ある程度のシステムの柔軟性を向上させることはできません。
短所
1は、ファクトリクラスは、すべての製品の作成ロジックを集中管理するので、一度ではない仕事をして、システム全体が影響を受けなければなりません。
2は、システム内のファクトリクラスの数を増加させる簡単なモードを使用して、複雑さと、特定のプログラムでシステムを理解することの難しさを増します。
図3は、システムの拡張が難しい、新製品は工場を変更するロジックを追加する必要があります一度、製品の多くの種類がある場合には、植物のロジックが複雑すぎる可能性があり、システムの拡張やメンテナンスを助長されていません。
図4は、工場の役割をもたらす静的ファクトリメソッドの使用による単純なファクトリパターンは、継承に基づいて階層を形成することができません。
シナリオ
1、オブジェクトファクトリクラスが比較的小さいの作成を担当しています。
2、クライアントは気にしないオブジェクトを作成する方法、パラメータは、ファクトリクラスを渡さ知っています
コードの実装
最初のステップ:私たちはお茶を販売する製品の定義。どれでもお茶を準備する必要があり、生産、および完全な3つのステップ。
PS:作成ティーインタフェース
;ためcom.leeborn.design.simpleFactory Package変更 / ** *ミルクの食事は、私は牛乳必要が記述するための責任を分類 * @author leeborn * / パブリック抽象クラスTeaMilk { パブリック抽象ボイド(PREPARE); メイク(無効パブリック抽象); 公共の抽象無効コンプリート(); }
ステップ2:私たちは、お茶の料理のすべての種類を生成選びます
PS:お茶、特定の実装クラス
TeaMilkStocking、TeaMilkDuck:2つのクラスを作成します。
;ためcom.leeborn.design.simpleFactoryパッケージ変更 //はお茶が1つの調理ストッキングを達成 拡張TeaMilk {TeaMilkStocking publicクラスを @Override 公共ボイド(PREPARE){ System.out.printlnは( "!準備ストッキングをO(∩_∩)O") ; } @Override ます。public voidメイク(){ System.out.printlnは( "ストッキングはお茶を作ったよ!"); } @Override ます。public void完全な(){ System.out.printlnは( "完全なパンスト茶"); } }
用com.leeborn.design.simpleFactoryパッケージ変更; // 2人の元陽茶のシェフを達成 パブリッククラスTeaMilkDuck TeaMilk {拡張 @Override 公共ボイド(){PREPARE のSystem.out.println( "!準備元陽O(∩_∩)O"を) ; } @Override ます。public voidメイク(){ System.out.printlnは( "お茶を作っ鴨!"); } @Override 完了します。public void(){ System.out.printlnは( "完全なカモ茶"); } }
第三段階:茶グループ職長を選択し、関係者はどのようなシェフの仕事、具体的に言いました
com.leeborn.design.simpleFactoryパッケージ; インポートjava.time.LocalDateTime; //茶クックグループリーダー パブリッククラスTeaMilkStore { プライベートSimpleTeaMilkFactory simpleTeaMilkFactory; 公共TeaMilkStore(SimpleTeaMilkFactory simpleTeaMilkFactory){ this.simpleTeaMilkFactory = simpleTeaMilkFactory; } //特定を作成しますお茶 ます。public void orderTeaMilk(文字列typePizza){ System.out.printlnは( "お茶の種類作り始める:" + typePizzaを); ; teaMilk teaMilk = simpleTeaMilkFactory.createTeaMilk(typePizza) teaMilk.prepare(); teaMilk.make(); teaMilk .complete(); のSystem.out.println( "完成茶:" + LocalDateTime.now()); } }
ステップ4:営業担当者の使用に利用できるようにキャッシュレジスタ
売上高はスタッフのみを選択する必要があります。紅茶やミルクティーストッキング鴨マンダリン
com.leeborn.design.simpleFactoryパッケージ変更のために、 自分のアプリケーションの質量参加注文部材を介し//お茶の販売および取得特定の茶 パブリッククラスSimpleTeaMilkFactory { 公共TeaMilkのcreateTeaMilk(文字列typePizza){ IF(typePizza.equals(「DUCK」)){ 新しい新しいTeaMilkDuckリターン(); } IF(typePizza.equals( "ストック")){ )(新しい新しいTeaMilkStockingを返す; } そうでなければ{ 戻りNULL; } } }
ステップ5:顧客ティーPSを購入する:コードのテスト
com.leeborn.design.simpleFactoryパッケージ; パブリッククラスのテスト{ 公共の静的な無効メイン(文字列[] args){ SimpleTeaMilkFactory simpleTeaMilkFactory新しい新SimpleTeaMilkFactory =(); TeaMilkStore teaMilkStore =新新TeaMilkStore(simpleTeaMilkFactory); 単一のクライアントの下//茶鴨 teaMilkStore。 orderTeaMilk( "DUCK"); 顧客で//単一ストッキング茶 teaMilkStore.orderTeaMilk( "ストッキング"); } }