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 パターンを応用することによって効率的に生成することができる。
関連項目
デザインパターン
表
話
編
歴
生成に関するパターン
Abstract factory
Builder
Factory method
Prototype
Singleton
構造に関するパターン
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
振る舞いに関するパターン
Chain of responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template method
Visitor
並行性に関するパターン
Active object(英語版)
Balking(英語版)
Double-checked locking(英語版)
Event-based asynchronous(英語版)
Guarded suspension(英語版)
Join(英語版)
ロック
モニタ
Proactor(英語版)
Reactor
Readers?writer lock(英語版)
Scheduler(英語版)
Thread pool(英語版)
スレッド局所記憶
アーキテクチャに関するパターン
Front Controller(英語版)
Interceptor(英語版)
MVC
MVVM
多層アーキテクチャ
Specification(英語版)
出版-購読型モデル
Naked objects(英語版)
Service Locator(英語版)
Active Record
Identity map(英語版)
Data Access Object
Data Transfer Object
その他のパターン
依存性の注入 (DI)
遅延読み込み
モックオブジェクト
Null object(英語版)
Object pool(英語版)
Servant(英語版)
Type tunnel(英語版)
関連する人々
ギャング・オブ・フォー
エーリヒ・ガンマ
リチャード・ヘルム
ラルフ・ジョンソン
ジョン・ブリシディース
クリストファー・アレグザンダー
グラディ・ブーチ
ケント・ベック
ウォード・カニンガム
マーティン・ファウラー
ロバート・セシル・マーティン(英語版)
ジム・コプリエン(英語版)
ダグラス・C. シュミット(英語版)
リンダ・ライジング(英語版)
関連項目
アナリシスパターン
アンチパターン
一覧
カテゴリ
コモンズ