Builder パターン (複合化されたオブジェクトについて, その生成過程を隠蔽することにより, 同じ過程で異なる内部形式のオブジェクトを生成できる)
[Builder] という単語は, 建築者を意味する.
全体を構成している各部分の処理を積上げていくのが [Builder パターン] である.
役割
- Client (依頼者):
[Director] に建築指示を出す
- Diretor (監督者):
[ConcreteBuilder] の実態に関係なく, [Builder] に提供されているインタフェースのみを使用し, 建築する. その構築過程は, [Client] から隠蔽する.
- Builder (建築者):
建築過程の各メソッドのインタフェースを定める.
- ConcreteBuilder (具体的な建築者):
[Builder] が定めたインタフェースを実装する.
クラス図
Builder パターンのクラス図
ソースコード
- Client.java
| public class Client{
public static void main(String[] args){
String result = "";
Director director = new Director(new ConcreteBuilder());
result = (String)director.construct();
System.out.println(result);
}
}
|
- Director.java
1
2
3
4
5
6
7
8
9
10
11
12
13 | public class Director{
private Builder builder;
public Director(Builder builder){
this.builder = builder;
}
public Object construct(){
builder.part1("工程 1");
builder.part2("工程 2");
return builder.getResult();
}
}
|
- Builder.java
| public abstract class Builder{
public abstract void part1(String str);
public abstract void part2(String str);
public abstract Object getResult();
}
|
- ConcreteBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | public class ConcreteBuilder extends Builder{
private StringBuffer sb = new StringBuffer();
public void part1(String str){
sb.append("part1: " + str + System.getProperty("line.separator"));
}
public void part2(String str){
sb.append("part2: " + str + System.getProperty("line.separator"));
}
public Object getResult(){
return sb.toString();
}
}
|
上記のプログラムの実行結果:
[wtopia Builder]$ java Client
part1: 工程 1
part2: 工程 2
(空白)