Rarestyleへようこそ
C#,デザインパターン,UML,オブジェクト指向,Webサービス,iPAQ(モバイル) アクセス数: Number_0Number_0Number_5Number_4Number_2Number_0Number_7Number_2
インデント OCPとデザインパターン
インデント サンプルコードについて
インデント デザインパターン ひとくちメモ
インデント FactoryMethodパターン
インデント AbstractFactoryパターン
インデント Builderパターン
インデント Prototypeパターン
インデント Adapterパターン
インデント Bridgeパターン
インデント Compositeパターン
インデント Decoratorパターン
インデント Facadeパターン
インデント Flyweightパターン
インデント Proxyパターン
インデント TemplateMethodパターン
インデント Chain of Responsibilityパターン
インデント Commandパターン
インデント Iteratorパターン
インデント Mediatorパターン
インデント Mementoパターン
インデント Observerパターン
インデント Stateパターン
インデント Strategyパターン
インデント Visitorパターン
インデント 速習!デザインパターン第一回
インデント 速習!デザインパターン第二回
インデント 速習!デザインパターン第三回
インデント UMLとは
インデント UML入門
インデント オブジェクト指向
インデント クラス図
インデント アクティビティ図
インデント インタラクション図
インデント ユースケース図
インデント Rarestyle証明書サービス
インデント QRコード発行WSDL
インデント QRコード発行サンプル
インデント J2EE覚書
インデント FreeMind実践レポート
インデント モバイル情報
インデント Homeページ
インデント イベント&デジタルファッション
インデント ごあいさつ・免責情報
インデント お問い合わせ
デザインパターンでキャリアアップ

Builderパターン (デザインパターン)

Builderパターン 導入

Builderパターンは、オブジェクトの作成手順を表現形式から分離することで、作成手順を再利用出来るようにするパターンです。

指示者(Director)は構築者(Builder)を保持するように構成します。実際の生成は具象構築者(ConcreteBuilder)で行いますが、指示者のほうで、抽象化した構築者のインターフェースを利用することで、指示者は生成物の指導が可能になります。

Builderパターン ポイント

Builderパターンでは、作成手順をBulderクラスとして抽象化しています。このため生成物の指導は それぞれの具象構築者に作成してもらい、新たな生成物を作成することも可能になっています。 (このサンプル例では、各具象構成者の組み合わせで新たな生成物を作成する処理はありませんが)

UML Builderパターン

C#ソースコード

Sample.cs

using System;

namespace Builder
{
   //----------------------------------------------------------------
   //
   //  デザインパターン (Builder)
   //
   //  オブジェクトの作成手順を表現形式から分離することで、作成手順を再利用
   //  出来るようにする
   //
   //---------------------------------------------------------------

   //抽象構築者定義
   //Director側で操作するインターフェースのみを定義します。
   public abstract class Builder
   {
       public abstract string Egg
       {
           set;
       }
       public abstract string Lobster
       {
           set;
       }
       public abstract string Rice
       {
           set;
       }

       public abstract string BuildRecipe();
   }

   //具象構築者クラス
   //和食料理人(例)
   public class ConcreteBuilder_Wasyoku :Builder
   {
       private string strEgg;
       private string strLobster;
       private string strRice;

       public override string Egg
       {
           set{this.strEgg=value+"は半熟やわらかめに加熱します。";}
       }
       public override string Lobster
       {
           set{this.strLobster=value+"は、少し小さく最後に加熱します。";}
       }
       public override string Rice
       {
           set{this.strRice=value +"は、出し汁と一緒に煮ます。";}
       }
       //このメソッドが実際に生み出されるProductということになります。
       public override string BuildRecipe()
       {
           string strCooking;
           strCooking ="今回和食「ぞうすい」を注文ありがとうございます。\n";
           strCooking +="作り方は、下記のとおりです。***********************" +"\n";
           strCooking +="\t"+this.strEgg +"\n";
           strCooking +="\t"+this.strLobster +"\n";
           strCooking +="\t"+this.strRice + "\n";
           return strCooking;
       }
   }


   //具象構築者クラス
   //洋食料理人(例)
   public class ConcreteBuilder_Yosyoku :Builder
   {
       private string strEgg;
       private string strLobster;
       private string strRice;

       public override string Egg
       {
           set{this.strEgg=value+"は牛乳を混ぜてホワイトソースにします。";}
       }
       public override string Lobster
       {
           set{this.strLobster=value+"は、少しな殻をむいたものを使用します。";}
       }
       public override string Rice
       {
           set{this.strRice=value +"は、バターを加え、オーブンレンジで加熱します。";}
       }
       //このメソッドが実際に生み出されるProductということになります。
       public override string BuildRecipe()
       {
           string strCooking;
           strCooking ="今回洋食「ドリア」を注文ありがとうございます。\n";
           strCooking +="作り方は、下記のとおりです。***********************" +"\n";
           strCooking +="\t"+this.strEgg +"\n";
           strCooking +="\t"+this.strLobster +"\n";
           strCooking +="\t"+this.strRice + "\n";
           return strCooking;
       }
   }


   //具象構築者クラス
   //中華料理人(例)
   public class ConcreteBuilder_Chuka :Builder
   {
       private string strEgg;
       private string strLobster;
       private string strRice;

       public override string Egg
       {
           set{this.strEgg=value+"はごばんと一緒にいためます。";}
       }
       public override string Lobster
       {
           set{this.strLobster=value+"は、きくらげ、たけのこと一緒にまぜます。";}
       }
       public override string Rice
       {
           set{this.strRice=value +"は、塩、コショウ、オイスターソースいれて強火で加熱します。";}
       }
       //このメソッドが実際に生み出されるProductということになります。
       public override string BuildRecipe()
       {
           string strCooking;
           strCooking ="今回中華「チャーハン」を注文ありがとうございます。\n";
           strCooking +="作り方は、下記のとおりです。***********************" +"\n";
           strCooking +="\t"+this.strEgg +"\n";
           strCooking +="\t"+this.strLobster +"\n";
           strCooking +="\t"+this.strRice + "\n";
           return strCooking;
       }
   }

   //Directorクラス
   //Builderオブジェクトを保持します。
   //保持しているBuilderオブジェクトに対して
   //生成物の指導を行います。
   public class Director
   {
       private Builder Build;

       public Builder SetBuilder
       {
           set{this.Build=value;}
       }

       //保持しているBuilderオブジェクトに対して
       //情報をセットします。
       public void Construct()
       {
           Build.Egg       ="坂本の卵";
           Build.Lobster   ="ブラックタイガー";
           Build.Rice      ="コシヒカリ";
       }
   }

   /// <summary>
   /// Class1 の概要の説明です。
   /// </summary>
   class Class1
   {
       /// <summary>
       /// アプリケーションのメイン エントリ ポイントです。
       /// </summary>
       [STAThread]
       static void Main(string[] args)
       {

           //指示者のインスタンスを生成します。
           Director shimizu =new Director();
           //具象構築者のインスタンスを生成します。
           Builder BuildWasyoku =new ConcreteBuilder_Wasyoku();    //和
           Builder BuildYosyoku =new ConcreteBuilder_Yosyoku();    //洋
           Builder BuildChuka =new ConcreteBuilder_Chuka();        //中

           //指示者は具象料理人に指示します。(具象構築者を保持する形となります。)
           shimizu.SetBuilder=BuildWasyoku;
           //料理の材料を渡します。(ここがポイント!!)
           //Directorが作成手順を含めた処理を担当する
           shimizu.Construct();
           //和食を出します。
           //実際の処理は、ConcreteBuilderが担当する
           Console.WriteLine(BuildWasyoku.BuildRecipe());

           //洋食のばあい
           shimizu.SetBuilder=BuildYosyoku;
           shimizu.Construct();
           Console.WriteLine(BuildYosyoku.BuildRecipe());
           //中華の場合
           shimizu.SetBuilder=BuildChuka;
           shimizu.Construct();
           Console.WriteLine(BuildChuka.BuildRecipe());

           //ポイント
           //作成手順を含めた指示はDirectorが担当する。
           //実際の処理はConcreteBuilderが担当する。
           //Directorが持つ作成手順を再利用しながら、別の形式の出力を得ることが
           //可能。
       }
   }
}

builder 実行結果

builder_fig

UMLプラグインによる描画 Builderパターン

Javaソースコード Builderパターン

Builder.java
   1: package builder;
   2: 
   3: public abstract class Builder implements Iingredients {
   4: 
   5:     abstract String BuildRecipe();
   6: 
   7: }
ConcreteBuilder_Chuka.java
   1: package builder;
   2: 
   3: public class ConcreteBuilder_Chuka extends Builder {
   4: 
   5:     private String strEgg;
   6:     private String strLobster;
   7:     private String strRice;
   8: 
   9:     public void setEgg(String buildEgg) {
  10:         
  11:         this.strEgg=buildEgg+"はご飯と一緒にいためます。";
  12:     }
  13:     
  14:     public void setLobster(String buildLobster) {
  15:         
  16:         this.strLobster=buildLobster + "は、きくらげ、たけのこ一緒にまぜます。";
  17:     }
  18:     
  19:     public void setRice(String buildRice) {
  20:         
  21:         this.strRice     =buildRice +"は、塩、コショウ、オイスターソースをいれて強火で加熱します。";
  22:     }
  23: 
  24:     public String BuildRecipe() {
  25:         String strCooking="";
  26:         strCooking +="今回和食「チャーハン」を注文ありがとうございます。" + "\n";
  27:         strCooking +="作り方は、下記のとおりです。*******************************"    +"\n";
  28:         strCooking +="\t"+this.strEgg +"\n";
  29:         strCooking +="\t"+this.strLobster +"\n";
  30:         strCooking +="\t"+this.strRice +"\n";
  31:         
  32:         return strCooking;
  33:     }
  34: }
ConcreteBuilder_Washoku.java
   1: package builder;
   2: 
   3: public class ConcreteBuilder_Washoku extends Builder {
   4:     
   5:     private String strEgg;
   6:     private String strLobster;
   7:     private String strRice;
   8: 
   9:     public void setEgg(String buildEgg){
  10:     
  11:         this.strEgg=buildEgg+"は半熟やわらかめに加熱します。";
  12:     }
  13:     
  14:     public void setLobster(String buildLobster){
  15:         
  16:         this.strLobster=buildLobster+"は、少し小さく最後に加熱します。";    
  17:     }
  18:     
  19:     public void setRice(String buildRice){
  20:         
  21:         this.strRice    =buildRice    +"は、だし汁と一緒に煮ます。";
  22:     }
  23: 
  24:     public String BuildRecipe() {
  25:         
  26:         String strCooking ="";
  27:         strCooking +="今回和食「ぞうすい」を注文ありがとうございます。" + "\n";
  28:         strCooking +="作り方は、下記のとおりです。*******************************"    +"\n";
  29:         strCooking +="\t"+this.strEgg +"\n";
  30:         strCooking +="\t"+this.strLobster +"\n";
  31:         strCooking +="\t"+this.strRice +"\n";
  32:         return strCooking;
  33:     }
  34: }
ConcreteBuilder_Yosyoku.java
   1: package builder;
   2: 
   3: public class ConcreteBuilder_Yosyoku extends Builder {
   4: 
   5:     private String strEgg;
   6:     private String strLobster;
   7:     private String strRice;
   8:     
   9:     public void setEgg(String buildEgg) {
  10:         this.strEgg=buildEgg+"は牛乳を混ぜてホワイトソースにします。";
  11:     }
  12:     
  13:     public void setLobster(String buildLobster) {
  14:         this.strLobster=buildLobster+"は、殻をむいたものを使用します。";
  15:         
  16:     }
  17: 
  18:     public void setRice(String buildRice) {
  19:         this.strRice    = buildRice    +"は、バターを加え、オーブンレンジで加熱します。";
  20:         
  21:     }
  22: 
  23:     public String BuildRecipe() {
  24:         String strCooking="";
  25:         strCooking +="今回和食「ドリア」を注文ありがとうございます。"+ "\n";
  26:         strCooking +="作り方は、下記のとおりです。*******************************"    +"\n";
  27:         strCooking +="\t"+this.strEgg +"\n";
  28:         strCooking +="\t"+this.strLobster +"\n";
  29:         strCooking +="\t"+this.strRice +"\n";
  30:         return strCooking;
  31:     }
  32: 
  33: }
Director.java
   1: package builder;
   2: 
   3: public class Director {
   4: 
   5:     private Builder builder;
   6: 
   7:     //保持しているBuilderオブジェクトに対して
   8:     //生成物の指導を行います。
   9:     public void Construct() {
  10:         this.builder.setEgg("坂本の卵");
  11:         this.builder.setLobster("ブラックタイガー");
  12:         this.builder.setRice("コシヒカリ");
  13:     }
  14: 
  15:     public void setBuilder(Builder builder) {
  16:         this.builder = builder;
  17:     }
  18: 
  19: }
Iingredients.java
   1: package builder;
   2: 
   3: interface Iingredients {
   4:     
   5:     void setLobster(String buildLobster);
   6: 
   7:     void setRice(String buildRice);
   8: 
   9:     void setEgg(String buildEgg);
  10: 
  11: }
StartClass.java
   1: package builder;
   2: 
   3: public class StartClass {
   4: 
   5:     public static void main(String[] args) {
   6:         //指示者のインスタンス作成
   7:         Director director =new Director();
   8:         //具象構築者のインスタンスを生成します。
   9:         Builder buildWashoku =new ConcreteBuilder_Washoku();    //和
  10:         Builder buildYosyoku =new ConcreteBuilder_Yosyoku();    //洋
  11:         Builder buildChuka     =new ConcreteBuilder_Chuka();        //中
  12:         
  13:         //指示者はBuilderを保持します。
  14:         director.setBuilder(buildWashoku);
  15:         //指示者は情報を指示します。
  16:         director.Construct();
  17:         //具象構築者の処理(和食)
  18:         System.out.println(buildWashoku.BuildRecipe());
  19:         
  20:         //以下同様に洋食、中華の具象構築者の処理を記述できます。
  21:         director.setBuilder(buildYosyoku);
  22:         director.Construct();
  23:         System.out.println(buildYosyoku.BuildRecipe());
  24:         director.setBuilder(buildChuka);
  25:         director.Construct();
  26:         System.out.println(buildChuka.BuildRecipe());
  27:         
  28:     }
  29: }



コミュニティマーカーデザインパターン「ひとくちメモ」へ

コミュニティマーカーHomeへもどる

お天気情報
東京都 東京 - 今日の天気
晴れ - リンク先
最高 最低
気温 - -
湿度 - -
取得日:2010/03/12 17:00:00  ST: True
東京都 東京 - 明日の天気
晴時々曇 - リンク先
最高 最低
気温 19 10
湿度 66.2 50
取得日:2010/03/12 17:00:00  ST: True
東京都 東京 - あさっての天気
晴時々曇 - リンク先
最高 最低
気温 13 5
湿度 55.4 41
取得日:2010/03/12 17:00:00  ST: True
大阪府 大阪 - 今日の天気
曇のち晴 - リンク先
最高 最低
気温 - -
湿度 - -
取得日:2010/03/12 17:00:00  ST: True
大阪府 大阪 - 明日の天気
晴時々曇 - リンク先
最高 最低
気温 - -
湿度 - -
取得日:2010/03/12 17:00:00  ST: True
大阪府 大阪 - あさっての天気
晴時々曇 - リンク先
最高 最低
気温 14 5
湿度 57.2 41
取得日:2010/03/12 17:00:00  ST: True
livedoorのWebサービスより提供
【工事中】お天気配信 ユーザー登録
Copyright 2006 Rarestyle このページへのリンクは確認不要です。
Programming by Xenon Project Team     postmaster@rarestyle.net
免責事項について
レアスタイルサイト内検索