-
Notifications
You must be signed in to change notification settings - Fork 3
Builder
Pandas edited this page Jun 16, 2017
·
2 revisions
Отделяет конструирование сложного объекта от его представления, так что в результате одного и того же процесса конструирования могут получаться разные представления.
Используйте паттерн строитель, когда:
- Алгоритм создания сложного объекта не должен зависеть от того, из каких частей состоит объект и как они стыкуются между собой;
- Процесс конструирования должен обеспечивать различные представления конструируемого объекта.
- Builder - строитель: задает абстрактный интерфейс для создания частей объекта Product;
- ConcreteBuilder- конкретный строитель: конструирует и собирает вместе части продукта посредством реализации интерфейса Builder; Определяет создаваемое представление и следит за ним; Предоставляет интерфейс для доступа к продукту;
- Director - распорядитель: конструирует объект, пользуясь интерфейсом Builder;
- Product - продукт: представляет сложный конструируемый объект. ConcreteBuilder строит внутреннее представление продукта и определяет процесс его сборки; Включает классы, которые определяют составные части, в том числе интерфейсы для сборки конечного результата из частей.
- клиент создает объект-распорядитель Director и конфигурирует его нужным объектом строителем Builder;
- распорядитель уведомляет строителя о том, что нужно построить очередную часть продукта;
- строитель обрабатывает запросы распорядителя и добавляет новые части к продукту;
- клиент забирает продукт у строителя.
Обычно существует абстрактный класс Builder, в котором определены опера ции для каждого компонента, который распорядитель может «попросить» создать. По умолчанию эти операции ничего не делают. Но в классе конкретного строителя ConcreteBuilder они замещены для тех компонентов, в создании которых он принимает участие.
- интерфейс сборки и конструирования. Строители конструируют свои продукты шаг за шагом. Поэтому интерфейс класса Builder должен быть до статочно общим, чтобы обеспечить конструирование при любом виде конкретного строителя.
- пустые методы класса Builder по умолчанию. В C++ методы строителя намеренно не объявлены чисто виртуальными функциями членами. Вместо этого они определены как пустые функции, что позволяет подклассу замещать только те операции, в которых он заинтересован.
Плюсы и минусы паттерна строитель и его применения:
- Позволяет изменять внутреннее представление продукта;
- Изолирует код, реализующий конструирование и представление;
- Дает более тонкий контроль над процессом конструирования.