Я изучаю шаблон Builder
В приведенной выше ссылке (пример Java) я заметил, что Builder предлагает интерфейс для создания нескольких компонентов. Наряду с их вызовом мы также вызываем getProduct().
Дело в том, что я не понимаю, почему директор должен вызывать все эти методы построения компонентов один за другим и получать результат в конце.
/** "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 в сам класс ConcreteBuilder, а не в директорию, и фактически исключить слой директора.
Я понимаю, что описанный выше подход может превратить шаблон Builder во что-то другое, но я не понимаю, почему директор выполняет работу шаг за шагом. Какая польза? Если есть несколько директоров, будет дублированный код, верно? Возможно, я не понимаю мотива выполнения шаблона Builder...
ОБНОВЛЕНИЕ. Сосредотачивается ли шаблон Builder на предложении настраиваемого выбора компонентов при создании более крупного сложного объекта? В противном случае, на данный момент, я не вижу смысла вводить дополнительный слой, Директор.
Даже если это так, шаблон Decorator может быть лучшей идеей для достижения того же за счет динамической настройки компонентов. Где-то мне не хватает смысла за Builder.. :(