Skip to content

Builder

Pandas edited this page Jun 16, 2017 · 2 revisions

Назначение

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

Применимость

Используйте паттерн строитель, когда:

  • Алгоритм создания сложного объекта не должен зависеть от того, из каких частей состоит объект и как они стыкуются между собой;
  • Процесс конструирования должен обеспечивать различные представления конструируемого объекта.

Структура

Imgur

Участники

  • Builder - строитель: задает абстрактный интерфейс для создания частей объекта Product;
  • ConcreteBuilder- конкретный строитель: конструирует и собирает вместе части продукта посредством реализации интерфейса Builder; Определяет создаваемое представление и следит за ним; Предоставляет интерфейс для доступа к продукту;
  • Director - распорядитель: конструирует объект, пользуясь интерфейсом Builder;
  • Product - продукт: представляет сложный конструируемый объект. ConcreteBuilder строит внутреннее представление продукта и определяет процесс его сборки; Включает классы, которые определяют составные части, в том числе интерфейсы для сборки конечного результата из частей.

Отношения

  • клиент создает объект-распорядитель Director и конфигурирует его нужным объектом строителем Builder;
  • распорядитель уведомляет строителя о том, что нужно построить очередную часть продукта;
  • строитель обрабатывает запросы распорядителя и добавляет новые части к продукту;
  • клиент забирает продукт у строителя.

Реализация

Обычно существует абстрактный класс Builder, в котором определены опера ции для каждого компонента, который распорядитель может «попросить» создать. По умолчанию эти операции ничего не делают. Но в классе конкретного строителя ConcreteBuilder они замещены для тех компонентов, в создании которых он принимает участие.

  • интерфейс сборки и конструирования. Строители конструируют свои продукты шаг за шагом. Поэтому интерфейс класса Builder должен быть до статочно общим, чтобы обеспечить конструирование при любом виде конкретного строителя.
  • пустые методы класса Builder по умолчанию. В C++ методы строителя намеренно не объявлены чисто виртуальными функциями членами. Вместо этого они определены как пустые функции, что позволяет подклассу замещать только те операции, в которых он заинтересован.

Результаты:

Плюсы и минусы паттерна строитель и его применения:

  • Позволяет изменять внутреннее представление продукта;
  • Изолирует код, реализующий конструирование и представление;
  • Дает более тонкий контроль над процессом конструирования.
Clone this wiki locally