|
Rarestyleへようこそ
|
|
|
|
|
|
デザインパターンでキャリアアップ
|
Builderパターン (デザインパターン)
Builderパターン 導入
Builderパターンは、オブジェクトの作成手順を表現形式から分離することで、作成手順を再利用出来るようにするパターンです。
指示者(Director)は構築者(Builder)を保持するように構成します。実際の生成は具象構築者(ConcreteBuilder)で行いますが、指示者のほうで、抽象化した構築者のインターフェースを利用することで、指示者は生成物の指導が可能になります。
Builderパターン ポイント
Builderパターンでは、作成手順をBulderクラスとして抽象化しています。このため生成物の指導は それぞれの具象構築者に作成してもらい、新たな生成物を作成することも可能になっています。
(このサンプル例では、各具象構成者の組み合わせで新たな生成物を作成する処理はありませんが)
UML Builderパターン
C#ソースコード
|
Sample.cs
|
|
using System;
namespace Builder
{
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 +"は、出し汁と一緒に煮ます。";}
}
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 +"は、バターを加え、オーブンレンジで加熱します。";}
}
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 +"は、塩、コショウ、オイスターソースいれて強火で加熱します。";}
}
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
Director
{
private Builder
Build;
public Builder SetBuilder
{
set{this.Build=value;}
}
public
void Construct()
{
Build.Egg
="坂本の卵";
Build.Lobster
="ブラックタイガー";
Build.Rice
="コシヒカリ";
}
}
class Class1
{
[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;
shimizu.Construct();
Console.WriteLine(BuildWasyoku.BuildRecipe());
shimizu.SetBuilder=BuildYosyoku;
shimizu.Construct();
Console.WriteLine(BuildYosyoku.BuildRecipe());
shimizu.SetBuilder=BuildChuka;
shimizu.Construct();
Console.WriteLine(BuildChuka.BuildRecipe());
}
}
}
|
builder 実行結果
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 |
|
|
東京都 東京 - あさっての天気
|
晴時々曇
-
|
|
|
|
|
取得日:2010/03/12 17:00:00
ST:
True |
|
|
大阪府 大阪 - 今日の天気
|
曇のち晴
-
|
|
|
|
|
取得日:2010/03/12 17:00:00
ST:
True |
|
|
大阪府 大阪 - 明日の天気
|
晴時々曇
-
|
|
|
|
|
取得日:2010/03/12 17:00:00
ST:
True |
|
|
大阪府 大阪 - あさっての天気
|
晴時々曇
-
|
|
|
|
|
取得日:2010/03/12 17:00:00
ST:
True |
|
| livedoorのWebサービスより提供 |
|
【工事中】お天気配信 ユーザー登録 |
|
|
|
|
|
Internet Explorer5.0以上のご利用を推奨いたします。
|
 |
Copyright 2006 Rarestyle
このページへのリンクは確認不要です。
Programming by Xenon Project Team
postmaster@rarestyle.net
免責事項について
|