Паттерн проектирования Строитель (Builder) — это порождающий паттерн, который позволяет создавать сложные объекты пошагово. Он отделяет процесс конструирования объекта от его представления, позволяя использовать один и тот же процесс конструирования для получения различных представлений объекта.
Ключевые особенности:
- Отделение конструирования от представления: Сам алгоритм создания объекта не зависит от конкретных деталей создаваемого объекта.
- Пошаговое создание: Объект создается путем вызова последовательности методов строителя.
- Различные вариации объекта: Один и тот же строитель может использоваться для создания объектов с разным составом или конфигурацией.
- Использование Director (Необязательно): Объект Director может управлять процессом построения, определяя последовательность вызовов методов строителя.
Структура паттерна:
- Builder: Интерфейс или абстрактный класс, определяющий методы для построения различных частей объекта.
- ConcreteBuilder: Реализует интерфейс Builder и предоставляет специфическую реализацию для построения конкретного типа объекта. Содержит методы для создания частей объекта и метод для получения построенного объекта.
- Product: Сложный объект, который строится.
- Director (Необязательно): Класс, который использует объект Builder для создания Product. Определяет порядок вызовов методов Builder.
Преимущества:
- Позволяет создавать объекты с большим количеством необязательных параметров, избегая "телескопического конструктора" (множества конструкторов с разным набором параметров).
- Позволяет изменять внутреннее представление объекта без изменения клиента, использующего Builder.
- Облегчает добавление новых типов построения.
- Улучшает читаемость и сопровождаемость кода при создании сложных объектов.
Недостатки:
- Увеличивает количество классов в проекте.
- Может быть избыточен для простых объектов.
Пример исполь