Builder パターン(ビルダー・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義されたデザインパターンの1つである。 オブジェクトの生成過程を抽象化することによって、動的なオブジェクトの生成を可能にする。
クラス図 Builder パターンのクラス図を以下に挙げる。
center|700px
利用例 Java による利用例を以下に挙げる。このソースコードは Java SE 5(J2SE 5.0) 以降のバージョンで動作する。
enum Material{WOOD, CLAY, CONCRETE, SNOW}
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]
Director (監督) の管理の元、それぞれのBuilder (大工) が異なるBuilding (生成物) インスタンスを生成しているのが分かる。
関係するパターン Strategy パターンBuilder を Strategy パターンにおける Context として設計することにより、インスタンスの生成過程をより柔軟にすることができる。 Composite パターンComposite のような複雑な構造を持つインスタンスは、Builder パターンを応用することによって効率的に生成することができる。
関連項目 デザインパターン