ビルダーパターンを学んでいます
上記のリンク (Java の例) で、Builder が複数のコンポーネントを構築するためのインターフェースを提供していることに気付きました。それらを呼び出すとともに、getProduct() も呼び出します。
私が理解できない点は、Director がこれらのすべてのコンポーネント構成メソッドを 1 つずつ呼び出して、最終的に結果を取得する必要があるのはなぜかということです。
/** "Director" */
class Waiter {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder pb) { pizzaBuilder = pb; }
public Pizza getPizza() { return pizzaBuilder.getPizza(); }
public void constructPizza() {
pizzaBuilder.createNewPizzaProduct();
pizzaBuilder.buildDough(); // construct component 1
pizzaBuilder.buildSauce(); // construct component 2
pizzaBuilder.buildTopping(); // construct component 3
}
}
コンポーネント 1、2、3 を構築するためのコードを、Director ではなく ConcreteBuilder クラス自体に含めて、実際に Director レイヤーを削除してみませんか。
上記のアプローチがビルダーのパターンを別のものに変える可能性があることは理解していますが、ディレクターが段階的に仕事をしている理由がわかりません。メリットは何ですか?取締役が複数いるとコードが重複しますよね?Builder パターンの実行の背後にある動機を理解していない可能性があります...
UPDATE : Builder パターンは、より大きな複雑なオブジェクトを作成しながら、カスタマイズ可能なコンポーネントの選択を提供することに重点を置いていますか? そうでなければ、今のところ、追加のレイヤーであるディレクターを導入する意味がわかりません。
その場合でも、Decorator パターンは、コンポーネントを動的にカスタマイズすることで同じことを達成するためのより良いアイデアかもしれません。どこかでビルダーの背後にあるポイントが欠けています.. :(