序文
当初は日産シリーズの前にビルダーに合わせてモードを記述するためのもの。しかし、オンラインリファレンスの記事の多くは、Builderパターンに私より多くの混乱を作るだけでなく、彼らは解釈する方法を理解することができなかったことを恐れています。最後に、Googleは英語で記事見つけビルダを、私は啓発させます。私たちはBuilderパターンを理解したいと考えて、この記事を翻訳しなければなりませんでした。
意図
Builderのモードは、徐々に複雑なオブジェクトを作成するために、デザイン・パターンを作成することです。Builderパターンを使用して、異なるタイプ、オブジェクトの異なる表現を生成するように構成されているのと同じコードを使用することができます。
問題
複雑なオブジェクトを想像し、それが初期化フィールドとネストされたオブジェクトの多くを必要とします。この初期化コードは、通常、大規模なコンストラクタに隠されている多数のパラメータを含んでいます。
たとえば、のは家のオブジェクトを作成してみましょう。シンプルな家は四方の壁、1フロア、ドア、窓のペアと屋根を必要とするビルドします。私たちは大きな、明るくしたい、そして家(このような加熱システム、配管や配線など)裏庭や他のグッズを持っている場合しかし、その後、どのようにそれを行うには?
最も簡単な解決策は、クラスを作成し、パラメータのサブクラスのセットのすべての組み合わせをカバーするために、基本的なハウスを継承しますが、後のサブクラスの多くを得ることです。すべての新しいパラメータは、さらに階層を展開する必要があります。
サブクラスを行う別の方法。あなたはすべてのパラメータのコンストラクタを作成することができます。このメソッドは、サブクラスの多数を必要としない、追加的な問題があります。
ほとんどの場合、ほとんどのパラメータは使用されません。このコンストラクタが呼び出されたときのコードは、非常に醜いになります。
解きます
建設モードでは、あなたのクラスからオブジェクトコンストラクタのコードを抽出して呼び出された別のオブジェクト生成に移動することをお勧めします。
ビルダー構築したモデルは、ステップのセット(壁の建設、構築されたドア)として組織目指します。ビルダーオブジェクト上の一連のステップは、オブジェクトを作成することができます。最も重要なことは、あなたがすべてのステップを呼び出す必要はありませんので、手順が呼び出す必要がありますする必要があります。
あなたは、製品の多様な形態を構築する必要がある場合には、いくつかのステップが異なる実装が必要な場合があります。例えば、壁は木で建てられたが、石で、城の壁を構築する必要がありロッジできます。
このシナリオでは、ビルダーは同じ、異なる種類を達成するための手順を構築するの異なるクラスを作成することができます。その後、さまざまな種類の建設にこれらのオブジェクトを使用することができます。
たとえば、すべての木材、ガラス、石とすべての組み込み鉄と第二、すべてのゴールドとダイヤモンドの第三の建設を構築するための最初のビルダー。あなたは普通の家は、そこに二ビルダーから小さな城を取得ビルダーから得ることができるのと同じ手順を呼び出すことによって、そこに第三ビルダーから宮殿を取得します。
ディレクター
私たちは、クラスを抽出するために、ビルダーのステップに一連の呼び出しを進めることができ、このクラスはディレクターと呼ばれています。
ディレクタークラスは、ビルドへのステップの実行順序を定義し、これらの手順を達成するためにビルダーを提供します。
直接クラスが絶対に必要というわけではない、我々は直接、特定の順序でビルダーを呼び出すことができます。ただし、Directorは、様々な建設計画を再利用することができます置くための良い方法です。
また、取締役のカテゴリは、完全に、製品構造の詳細を隠します。クライアントは、ビルド結果を得ることができますBuilderおよびディレクターの仲間を必要としています。
構造
- Builderのインタフェースは、発電機のすべての種類は、一般的な製品の設定手順です宣言する。
- 具体的なビルダーは提供
の手順を構築異なる実装を。 - 製品は、オブジェクトが生成する必要があります。別のコンストラクタ構築物は、異なる製品カテゴリ(継承)階層またはインタフェースに属していてもよいです。
- ディレクタークラスは、作成および製品固有のコンフィギュレーションモードを再利用することができますので、呼び出し建設一連の手順を定義します。
- クライアントは、Builderのオブジェクトは、Directorに関連付ける必要があります。通常、コンストラクタの引数のディレクターで一度だけ行きました。その後、全てのオブジェクトビルダの設定のためのディレクター。もう一つの方法は、別の発電機を使用して、ディレクターの方法にビルダーオブジェクトを渡すことです。
シーン
- コンストラクタのBuilderパターンが長すぎさあ。
- そのような石造りの家や木造家屋などの特定の製品の異なる表現を作成します。
別コードおよびビジネスコードに構成される複雑なオブジェクト構造。
コード
コードIは、缶の底に参照への直接アクセスを固執しませんでした。