362.94K
Category: programmingprogramming

Паттерн проектирования "Строитель"

1.

ПАТТЕРН
ПРОЕКТИРОВАНИЯ
“СТРОИТЕЛЬ”

2.

ОПРЕДЕЛЕНИЕ
Builder (Строитель) относится к классу порождающих
паттернов. Он используется для отделения процесса
конструирования сложного объекта от его представления,
так что в результате одного и того же конструирования
могут получаться различные объекты. Таким образом
можно получать разные представления объекта, используя
один и тот же шаблонный процесс. Сам Builder требует
создания дополнительного класса, с точно таким же
названием и добавлением к нему слова Builder.

3.

+ Паттерн предоставляет один из лучших способов
создания сложных объектов.
+ Полезен, если возможно наличие нескольких видов
объекта либо когда надо выполнить много шагов, которые
связаны с его созданием.
+ Позволяет отделить процесс создания сложного объекта
от его реализации. При этом, результатом одних и тех же
операций могут быть различные объекты.
+ Позволяет создавать разные виды объекта, избегая при
этом засорения конструктора (антипаттерн «Телескопический конструктор»).

4.

- Builder и созданный объект жестко связаны между
собой - если понадобится изменить что-то в Builder,
придется вносить изменения и в созданном объекте.

5.

Шаблон Строитель включает двух участников
процесса:
Строитель (Builder) – предоставляет методы для
сборки частей объекта, при необходимости
преобразовывает исходные данные в нужный вид,
создает и выдает объект;
Распорядитель (Director) – определяет стратегию
сборки: собирает данные и определяет порядок
вызовов методов Строителя.

6.

Реализация шаблона в общем виде:
1) Определяем шаги конструирования сложного объекта, и на их
основе разрабатываем интерфейс Строителя IBuilder;
2) Если планируется несколько стратегий сборки, то создаем
интерфейс Распорядителя IDirector;
3) Разрабатываем класс Распорядителя MyDirector (реализующий
IDirector), работающий со Строителями через интерфейс IBuilder;
4) Создаем класс Строителя MyBuilder, реализующий интерфейс
IBuilder и метод получения результата;
5) В клиентском коде экземпляру MyDirector передаем интерфейс
IBuilder экземпляра MyBuilder;
6) Запускаем процесс сборки, вызвав метод Распорядителя;
7) Получаем созданный экземпляр MyProduct у используемой
реализации Строителя MyBuilder.

7.

UML диаграмма паттерна “Строитель”
English     Русский Rules