Строитель — это порождающий паттерн проектирования, который позволяет создавать сложные объекты пошагово. Строитель даёт возможность использовать один и тот же код строительства для получения разных представлений объектов.
Покажем работу данного паттерна на автомобиле!
Пример конструирования автомобилей с инструкцией к ним:
Автомобиль — это сложный объект, который может быть создан разными способами. Вместо того, чтобы настраивать автомобиль через конструктор, мы вынесем его сборку в отдельный класс-строитель, предусмотрев методы для конфигурации всех частей автомобиля
Клиент может собирать автомобили, работая со строителем напрямую. Но, с другой стороны, он может поручить это дело директору. Ведь директор знает какие шаги строителя нужно вызвать, чтобы все прошло нужным образом!
А еще к каждому автомобилю нужно руководство, совпадающее с его конфигурацией. Поэтому создадим ещё один класс строителя, который будет печатать страницы руководства к той детали, которую мы встраиваем в продукт. Теперь, пропустив оба типа строителей через одни и те же шаги, мы получим автомобиль и подходящее к нему руководство пользователя.
Бумажное руководство и железный автомобиль — это две разных вещи, не имеющих ничего общего. По этой причине мы должны получать результат напрямую от строителей, а не от директора. Иначе нам пришлось бы жёстко привязать директора к конкретным классам автомобилей и руководств.
- Интерфейс строителя объявляет шаги конструирования продуктов, общие для всех видов строителей.
- Конкретные строители реализуют строительные шаги, каждый по-своему. Конкретные строители могут производить разнородные объекты, не имеющие общего интерфейса, в нашем случае создание машины и инструкции
- Продукт — создаваемый объект. Продукты, сделанные разными строителями, не обязаны иметь общий интерфейс. Наши продукты – машина и ее мануал
- Директор определяет порядок вызова строительных шагов для производства той или иной конфигурации продуктов
- Обычно Клиент подаёт в конструктор директора уже готовый объект-строитель, и в дальнейшем данный директор использует только его. Но возможен и другой вариант, когда клиент передаёт строителя через параметр строительного метода директора. В этом случае можно каждый раз применять разных строителей для производства различных представлений объектов
- Когда вы хотите избавиться от «телескопического конструктора» Это тот случай, если у нас есть конструктор с кучей опциональных параметров. Их неудобно вызывать, поэтому можно создать много конструкторы с меньшим количеством параметров. Тем не менее это захламляет код и делает его неудобным и неаккуратным
- Когда ваш код должен создавать разные представления какого-то объекта. Например, деревянные и железобетонные дома Строитель уместен при создании нескольких представлений объекта с одинаковыми этапами, но с разными деталями
Я выбрала такие свойства машины как количество мест, модель двигателя, руль и наличие gps. Все находится в main!
