Builder パターン
(Builder pattern から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2014/02/19 15:49 UTC 版)
Builder パターン(ビルダー・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義されたデザインパターンの1つである。 オブジェクトの生成過程を抽象化することによって、動的なオブジェクトの生成を可能にする。
クラス図
Builder パターンのクラス図を以下に挙げる。
利用例
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 パターンを応用することによって効率的に生成することができる。
関連項目
|
- Builder patternのページへのリンク