モデルビルダー
複雑なオブジェクトに段階的に構築するために、単純な複数のオブジェクトを使用して、ビルダーモード(Builderパターン)。 デザインパターンのこのタイプのオブジェクトを作成するための最良の方法を提供する、スキーマを作成属します。
ビルダークラスは、最終的なオブジェクトを構築するためのステップバイステップです。 ビルダークラスは他のオブジェクトとは無関係です。
入門
意図:同じ構築プロセスが異なる表現を作成できるように複合体は、その表現の分離を構築します。
主に解決するために:ソフトウェアシステムの主なソリューションを、時には特定のアルゴリズムは、サブオブジェクトの様々な部分から構成され、通常の作業を、作成するために、「複雑なオブジェクトを"直面している、需要の変化に、この複雑な主題の様々な部分は、多くの場合、顔急激な変化が、彼らはアルゴリズムが比較的安定して結合します。
使用するようにすると:それは基本的なコンポーネントの一部を変更しません、ならびにその組み合わせは、常に時代の変化します。
どのように修正する:変更と変わらずを分離しました。
キーコード:ビルダー:作成し、例を提供は、監督:依存関係の管理は、インスタンスを構築しました。
応用例:1、などKFC、バーガー、コーラ、フライドポテト、フライドチキンウィング、に行くが一定であり、その組成は常に変化している、いわゆる生成」のパッケージを。」2、StringBuilderのでJAVA。
利点:1、独立したビルダー、展開しやすいです。2、リスクの詳細を制御しやすいです。
短所:1は、製品に共通している必要があり、範囲が限定されています。2.複雑な内部の変更、建設クラスの多くがあります。
使用シナリオ:1、あなたは、オブジェクトが複雑な内部構造を有して生成する必要があります。2は、相互に依存するオブジェクトのプロパティ自体の内部で生成される必要があります。
注:プラントモデルとの違いは、次のとおりです。Builderのモデルは、部品の組み立ての順序で、より懸念しています。
実現
私たちは、ファーストフードレストランビジネスケースが、ここでパッケージは、典型的なバーガー(バーガー)とコールド(冷たい飲み物)のガラスでできていることを前提としています。 バーガー(バーガー)は野菜バーガー(ベジタリアンバーガー)またはチキンバーガー(チキンバーガー)することができ、それらは用紙トレイに包まれています。 コールド(冷たい飲み物)がコカ・コーラ(コークス)やペプシ(ペプシ)であってもよく、それらは瓶に詰められています。
我々は、アイテムのインタフェースと実装のエンティティクラス項目インタフェースの(そのようなハンバーガーや風邪など)食品の表現を作成し、インタフェースと実装エンティティがインタフェースをパッキング食品包装梱包表し、ハンブルクは、用紙トレイにパッケージで寒いです瓶に詰め。
その後、我々は、 アイテムとアイテムMealBuilderの組み合わせにより、異なるタイプのオブジェクトを作成するために、食事のクラス、ArrayListのと食事を作成します。BuilderPatternDemoは、私たちは食事を作成するためにMealBuilderクラスの使用を示します。
ステップ1
食品や食品包装エントリインターフェイスを作成します。
Item.java
パブリックインターフェイス項目{ パブリック文字列名(); 公共包装梱包(); 公共フロート価格(); }
Packing.java
パブリックインターフェイスパッキング{ パブリック文字列パック(); }
ステップ2
作成パッキングエンティティクラスは、インターフェイスを実装します。
Wrapper.java
パッキングパブリッククラスラッパーを実装{ @Override パブリック文字列パック(){ "ラッパー"を返します。 } }
Bottle.java
パッキングパブリッククラスボトル実装{ @Override パブリック文字列パック(){ 「ボトル」を返します。 } }
ステップ3
抽象クラスItemインターフェースを作成し、クラスには、デフォルトの機能を提供します。
Burger.java
パブリック抽象クラスバーガーは{アイテムを実装します @Override 公共包装梱包(){ 新しいラッパーを返します(); } @Override パブリック抽象フロート価格(); }
ColdDrink.java
パブリック抽象クラスColdDrinkは{アイテムを実装します @Override 公共包装梱包(){ 新しいボトルを返します(); } @Override パブリック抽象フロート価格(); }
ステップ4
エンティティクラスバーガーとColdDrinkの拡張を作成します。
VegBurger.java
パブリッククラスVegBurgerはバーガーを{拡張します @Override 公共フロート価格(){ 25.0fを返します。 } @Override パブリック文字列名(){ 「ベジバーガー」を返します。 } }
ChickenBurger.java
パブリッククラスチキンバーガーはバーガーを{拡張します @Override 公共フロート価格(){ 50.5fを返します。 } @Override パブリック文字列名(){ 「チキンバーガー」を返します。 } }
Coke.java
パブリッククラスコーラはColdDrinkを{拡張します @Override 公共フロート価格(){ 30.0fを返します。 } @Override パブリック文字列名(){ 「コーラ」を返します。 } }
Pepsi.java
パブリッククラスペプシはColdDrinkを{拡張します @Override 公共フロート価格(){ 35.0fを返します。 } @Override パブリック文字列名(){ 「ペプシ」を返します。 } }
ステップ5
上記で定義された項目オブジェクトに、食事のクラスを作成します。
Meal.java
輸入はjava.util.ArrayList; 輸入java.util.Listに。 パブリッククラス食事{ プライベートリスト<アイテム>アイテム=新しいのArrayList <項目>(); 公共ボイドのaddItem(項目項目){ (項目)に、Items.Add。 } 公共フロートgetCost(){ フロートコスト=は0.0f; {:(項目項目項目)のために コスト+ = item.price(); } コストを返します。 } 公共ボイドshowItems(){ {:(項目項目項目)のために System.out.print( "アイテム:" + item.name()); System.out.print( "、パッキング:「。+ Item.packing()パック()); System.out.println( "、価格:" + item.price()); } } }
ステップ6
MealBuilderクラス、食事のクラスオブジェクトを作成するための責任が実際のビルダーを作成します。
MealBuilder.java
パブリッククラスMealBuilder { 公共食事prepareVegMeal(){ 食事の食事=新しい食事(); meal.addItem(新しいVegBurger()); meal.addItem(新コークス()); 食事を返します。 } 公共食事prepareNonVegMeal(){ 食事の食事=新しい食事(); meal.addItem(新チキンバーガー()); meal.addItem(新しいペプシ()); 食事を返します。 } }
ステップ7
BuiderPatternDemoはビルダーモード(ビルダーパターン)を示すためにMealBuiderを使用しています。
BuilderPatternDemo.java
パブリッククラスBuilderPatternDemo { 公共の静的な無効メイン(文字列[] args){ MealBuilder mealBuilder =新しいMealBuilder(); 食事vegMeal = mealBuilder.prepareVegMeal(); System.out.println( "ベジタリアンミール"); vegMeal.showItems()。 System.out.println( "トータルコスト:「+ vegMeal.getCost()); 食事nonVegMeal = mealBuilder.prepareNonVegMeal(); System.out.println( "\ nは\ nNon-ベジタリアンミール"); nonVegMeal.showItems()。 System.out.println( "トータルコスト:「+ nonVegMeal.getCost()); } }
ステップ8
出力を確認します。
ベジミール アイテム:ベジバーガー、パッキング:ラッパー、価格:25.0 アイテム:コーラ、パッキング:ボトル、価格:30.0 総コスト:55.0 非ベジタリアンの食事 アイテム:チキンバーガー、パッキング:ラッパー、価格:50.5 アイテム:ペプシ、パッキング:ボトル、価格:35.0 総コスト:85.5