読者です 読者をやめる 読者になる 読者になる

プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

7.Builder 複雑なインスタンスを組み立てる

インターフェースのAPIを利用してロジックという枠組みを作り、具体的な実装を外部に任せることで、複雑なインスタンスを作成する。

f:id:p-monster:20121218195125p:plain

Builder・・・インスタンスを作成するためのAPIインスタンスの各部分を作るためのメソッドを用意
ConcreteBuilder・・・Builderの実装。最終結果を得るためのメソッドもここで用意される
Director・・・BuilderのAPIを使ってインスタンス生成。
Client・・・Builderパターンを利用する役

DirectorはBuilder抽象クラス(またはインターフェース)のメソッドを利用して処理を記述する。

処理の手順とその実装を切り離すことでクラスの依存性が低くなる。・・・再利用がしやすくなる。
練習問題においてメソッドの呼び出し順を強制するためにBuilderへコードを追加するという手法も使われていた。
ある意味C++0xのコンセプトに似ている。

関連しているパターン

TemplateMethod・・・BuilderパターンではDirectorがBuilderをコントロールする。TemplateMethodではスーパークラスがサブクラスをコントロールする
Composite・・・Builderパターンの成果物はCompositeになる場合がある
AbstractFactory・・・BuilderパターンもAbstractFactoryパターンも複雑なインスタンスを生成する
Facade・・・Director役はBuilder役の複雑なメソッドを組み合わせてインスタンスを構築する単純なAPIを外部に提供する。Facadeパターンは内部モジュールを組み合わせて、作業を行うための単純なAPIを外部に提供する

参考:

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門