блога Java Design Concepts , является специалистом по J2EE и имеет более чем семилетний опыт разработки и проектирования корпоративных систем. Здесь он начинает серию статей, цель которых — познакомить вас с шаблонами дизайна «Банды четырех». — Гертьян Виленга, лидер зоны JavaLobby
Намерение Образца
Шаблон Builder отделяет построение сложного объекта от его представления, так что один и тот же процесс построения может создавать разные представления. — гоф
Тип
Создание объекта
Решение
Шаблон Builder упрощает построение сложных объектов, указывая только тип и содержимое, необходимые для этого объекта. Процесс строительства сложного объекта, следовательно, позволит различным представителям создавать различные представления сложного объекта. Каждый из объектов конкретного строителя будет создавать различное представление сложного объекта.
Шаблон Builder состоит из Builder , ConcreteBuilder , Director и Product .
- Объект Director отвечает за процесс построения сложного объекта, но делегирует фактическое создание и сборку интерфейсу Builder .
- Объект Builder определяет интерфейс для создания частей сложного объекта.
- Продукт представляет собой сложный объект , который создается с помощью ConcreteBuilder объектов. Продукт состоит из нескольких частей, которые создаются объектами ConcreteBuilder отдельно .
- В ConcreteBuilder объекты создают и собрать части , которые составляют продукт через Builder интерфейс.
Клиентский объект создает экземпляр объекта Director и передает ему соответствующий объект Builder. Объект Director вызывает методы объекта Builder для создания и инициализации определенных частей объекта Product. Builder получает содержимое от объекта Director и добавляет его в объект Product. Объект Client имеет ссылку на объект Builder и извлекает из него созданный объект Product.
Состав
Конструкция объекта Complex (Продукт) скрыта объектами Builder от объектов Client и Director. Чтобы изменить внутреннее представление сложного объекта, новый конкретный объект-строитель определяется и используется клиентом через объект Director. В отличие от других шаблонов создания, шаблон Builder создает сложные объекты в секциях через объекты Director и Builder. Объекту Builder может потребоваться доступ к информации, которая использовалась на предыдущих этапах построения. Это означает, что даже части объекта Product создаются в отдельных разделах; они могут взаимодействовать с другими разделами для создания сложного объекта продукта.
Сложные объекты Product обычно не имеют общего абстрактного родительского объекта, поскольку их представление отличается и общий родительский класс или интерфейс могут быть невозможны. Поскольку клиентский объект указывает объект Builder, он должен обладать знаниями о том, как обращаться с объектом продукта, созданным объектом Builder.
Пример кода Java
Примером «Образца строителя» является еда, которую можно купить во многих франшизах быстрого питания. Комплексный продукт представляет собой комбинированное блюдо, состоящее из гамбургера, напитка и гарнира. В Builder объекты являются различными помощниками на кассе , который знает , как создать комбинированное питание для клиента. Объект Director — это инструкция, которую клиент дает помощнику о том, как должен быть создан конкретный заказ.
Пример комбинированной еды:
Скачать пример Combo Meal
ComboMealClient.java
Класс ComboMealClient использует ComboMealDirector и класс ComboMeal1ConcreteBuilder для создания сложного объекта с именем ComboMealProduct.
Код:
ComboMeal1ConcreteBuilder concreteBuilder = new ComboMeal1ConcreteBuilder();
ComboMealDirector mealDirector = new ComboMealDirector(concreteBuilder);
ComboMealProduct comboMealProduct = null;
mealDirector.constructComboMeal(SuperSize.HUGE);
comboMealProduct = concreteBuilder.getComboMealProduct();
ComboMealDirector.java
Класс ComboMealDirector вызывает соответствующие методы в ConcreteBuilder (ComboMeal1ConcreteBuilder) для создания сложного продукта ComboMealProduct.
Код:
public void constructComboMeal(SuperSize _mealSize) {
comboMealBuilder.buildBurgerPart();
comboMealBuilder.buildSideOrderPart(_mealSize);
comboMealBuilder.buildBeveragePart(_mealSize);
} // method constructComboMeal
ComboMealProduct.java
Класс ComboMealProduct — это сложный объект, отдельные части которого создаются различными объектами Builder.
ComboMealBuilder.java
Класс ComboMealBuilder содержит интерфейс, который используется ComboMealDirector для создания сложного объекта.
ComboMeal1ConcreteBuilder.java
Класс ComboMeal1ConcreteBuilder содержит реализацию, которая используется ComboMealDirector для создания сложного объекта.
Пример диаграммы классов
Диаграмма последовательности
Диаграмма последовательности «Яника Ингельбрехта» с Trace Modeler
Рекомендации
- Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес.
Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения. Аддисон
Уэсли, 1995