Builder は生成に関するデザインパターンの一つで、 複雑なオブジェクトを段階的に構築することができます。
他の生成に関するパターンとは異なり、 Builder ではプロダクト (訳注: 本パターンでは、 生成されるモノのことを一般にプロダクトと呼びます) が共通のインターフェースを持つ必要はありません。 このため、 同じ構築の手続きを経て、 異なるプロダクトを作成することができます。
概念的な例
Builder パターンは、 目的とするプロダクトが複雑で、 完成まで多くのステップが必要な時に使われます。 この場合、 単一の超巨大なコンストラクターを持つよりも、 いくつかの構築メソッドを持つ方がシンプルです。 多段階での構築方法では、 未完成の、 安全性に欠けるプロダクトがクライアントから利用可能になってしまうという潜在的問題がありますが、 Builder パターンを使うと、 構築が完了するまで、 プロダクトは外部に非公開の状態が保たれます。
以下のコードでは、 異なる種類の家 (igloo
と normalHouse
) が、 iglooBuilder
と normalBuilder
によって構築されています。 どちらの種類の家も、 同じ構築ステップを使います。 ディレクター構造体は、 構築過程を組織化する役に立ちます。
iBuilder.go: ビルダーのインターフェース
normalBuilder.go: 具象ビルダー
iglooBuilder.go: 具象ビルダー
house.go: 製品
director.go: ディレクター
main.go: クライアント・コード
output.txt: 実行結果