Builder パターン

Builder パターン（ビルダー・パターン）とは、GoF（Gang of Four; 4人のギャングたち）によって定義されたデザインパターンの1つである。
オブジェクトの生成過程を抽象化することによって、動的なオブジェクトの生成を可能にする。
クラス図.
Builder パターンのクラス図を以下に挙げる。
利用例.
Java による利用例を以下に挙げる。このソースコードは Java SE 5(J2SE 5.0) 以降のバージョンで動作する。
 class Building{
 private Material base;
 private Material frame;
 private Material wall;
 void setBase(Material m){
 this.base = m;
 void setFrame(Material m){
 this.frame = m;
 void setWall(Material m){
 this.wall = m;
 public String toString(){
 return "[Base:" + this.base + ", Frame:" + this.frame + ", Wall:" + this.wall + "]";
 interface Builder{
 void buildBase();
 void buildFrame();
 void buildWall();
 Building getResult();
 class JapaneseHouseBuilder implements Builder{
 private Building building;
 JapaneseHouseBuilder(){
 this.building = new Building();
 public void buildBase(){
 this.building.setBase(Material.CONCRETE);
 public void buildFrame(){
 this.building.setFrame(Material.WOOD);
 public void buildWall(){
 this.building.setWall(Material.CLAY);
 public Building getResult(){
 return this.building;
 class KamakuraBuilder implements Builder{
 private Building building;
 KamakuraBuilder(){
 this.building = new Building();
 public void buildBase(){
 this.building.setBase(Material.SNOW);
 public void buildFrame(){
 this.building.setFrame(Material.SNOW);
 public void buildWall(){
 this.building.setWall(Material.SNOW);
 public Building getResult(){
 return this.building;
 class Director{
 private Builder builder;
 Director(Builder builder){
 this.builder = builder;
 Building construct(){
 this.builder.buildBase();
 this.builder.buildFrame();
 this.builder.buildWall();
 return this.builder.getResult();
 public class BuilderTest{
 public static void main(String[] argv){
 Director d1 = new Director(new JapaneseHouseBuilder());
 Director d2 = new Director(new KamakuraBuilder());
 Building b1 = d1.construct();
 Building b2 = d2.construct();
 System.out.println(b1);
 System.out.println(b2);
このソースコードは、以下の結果を出力する。
[Base:CONCRETE, Frame:WOOD, Wall:CLAY]
[Base:SNOW, Frame:SNOW, Wall:SNOW]
codice_1 (監督) の管理の元、それぞれのcodice_2 (大工) が異なるcodice_3 (生成物) インスタンスを生成しているのが分かる。