ビルダーは、ソース オブジェクトからさまざまな複雑なオブジェクトを作成するために使用されるデザイン パターンです。ソース オブジェクトは、 Assembler抽象クラスの共通インターフェイスへの一連の呼び出しを通じて、完全な各オブジェクトの作成に個別に寄与するさまざまな部分で構成されます。
ソース オブジェクトの例は、エンコードする必要があるメッセージ内の文字または画像のリストです。ディレクター オブジェクトは、ソース オブジェクトに関する情報をAssemblerクラスに提供するために必要です。抽象マウンタクラスは、たとえばhandleCharacter()やhandleImage()など、Director クラスが使用するインターフェイスの呼び出しリストにすることができます。 Assemblerクラスの各具象バージョンは、これらの呼び出し用のメソッドを実装することも、呼び出された場合には単純に情報を無視することもできます。具体的なビルダーの例は、テキストを暗号化しますが、画像を無視するenigmaBuilderです。
前の例では、ソフトウェアは特定のBuilderクラスenigmaBuilderを作成します。このオブジェクトは、ソース オブジェクトのメイン メッセージからの各データを反復処理する単純なディレクター オブジェクトに渡されます。エディター クラスは、最終プロジェクトを段階的に作成します。最後に、メイン コードはマウンターから最終オブジェクトを要求し、それとディレクター オブジェクトを破棄します。その後、 enigmaBuilder暗号化技術を別の暗号化技術に置き換える必要があると判断された場合は、ディレクター クラスとメイン コードを少し変更するだけで、新しい Builder クラスに置き換えることができます。実際、唯一の変更は、現在のErectorクラスがパラメータとしてディレクターに渡されることです。
目的:複雑なオブジェクトの構築を表現から分離し、同じ構築プロセスで異なる表現を作成できるようにします。
クラス図
- エディタ
- 製品を構築するための抽象インターフェイス
- 組立業者コンクリート
- マウンタの実装を提供します
- 製品のさまざまな部品を組み立て、組み立てます
- 監督
- Erector 設計法を使用してオブジェクトを構築します
- 製品
- 構築中の複雑なオブジェクト

例
ジャワ
/** "製品" */ クラスピザ { プライベート文字列生地= "" ; プライベート文字列ソース= "" ; プライベート文字列トッピング= "" ; public void setDough(String生地) { this .生地= 生地。 } public void setSauce(Stringソース) { this .ソース= ソース; } public void setTopping(String topping) { this .トッピング= トッピング; } } /** "抽象ビルダー" */ 抽象クラスPizzaBuilder { 保護されたピザピザ; public Pizza getPizza() {ピザを返す; } public void createNewPizzaProduct() {ピザ= new Pizza(); } パブリック抽象 void buildDough(); パブリック抽象 void buildSauce(); public abstract void buildTopping(); } /** "コンクリートビルダー" */ class HawaiianPizzaBuilder extends PizzaBuilder { public void buildDough() {ピザ.setDough( "クロス" ); } public void buildSauce() {ピザ.setSauce( "マイルド" ); } public void buildTopping() {ピザ.setTopping( "ハム+パイナップル" ); } } /** "コンクリートビルダー" */ class SpicyPizzaBuilder extends PizzaBuilder { public void buildDough() {ピザ.setDough( "パン焼き" ); } public void buildSauce() {ピザ.setSauce( "ホット" ); } public void buildTopping() {ピザ.setTopping( "ペパロニ+サラミ" ); } } /** "監督" */ クラスウェイター { プライベートPizzaBuilderピザビルダー ; public void setPizzaBuilder(PizzaBuilder pb) {ピザビルダー= pb; } publicピザ getPizza() { returnピザビルダー.getPizza(); } public void constructionPizza() { ピザビルダー.createNewPizzaProduct (); ピザビルダー.ビルド生地(); ピザビルダー.ビルドソース(); ピザビルダー.buildTopping (); } } /** ピザを注文した顧客。 */ クラスビルダー例 { public static void main(String(link) args) { ウェイター ウェイター = new Waiter(); PizzaBuilder hawaiian_pizzabuilder = new HawaiianPizzaBuilder(); PizzaBuilder スパイシーピザビルダー =新しいSpicyPizzaBuilder(); waiter.setPizzaBuilder(hawaiian_pizzabuilder); waiter.constructPizza(); ピザピザ = waiter.getPizza(); } }

