Java: Объектно-ориентированный дизайн
Теория: Билдер (Builder)
Билдер (Builder) это шаблон проектирования, который используется там, где есть необходимость постепенного создания объекта, таким образом, чтобы гарантировалась его целостность, то есть то, что он создан целиком и полностью так, как это предполагалось.
Рассмотрим этот шаблон на примере конфигуратора машины. Возможно, вы встречались с таким на сайте автопроизводителей, когда они предлагают собрать свою версию машину выбрав цвет, кузов, версию двигателя, дополнительные опции и тому подобное.
Для реализации подобного конфигуратора нам понадобится класс описывающий машину со всеми возможными опциями. В процессе работы будет создаваться объект этого класса, который затем наполняется нужными данными. Так как данные появляются не одновременно, а по мере работы с конфигуратором, то основной способ наполнения объектов этого класса будет через сеттеры, а не через конструктор.
Пример использования:
Это абсолютно рабочий подход, но в некоторых ситуациях, он может приводить к проблеме. Так как объект заполняется постепенно, то вполне возможно, что он не будет заполнен правильно до конца. В идеале хотелось бы создать объект через конструктор передав туда сразу все обязательные параметры.
В таком случае мы можем пойти следующим путем. Начнем собирать данные в другом объекте, который в конце процесса сбора данных создаст нужный объект Car. Гипотетический код может выглядеть так:
Это и есть реализация шаблона проектирования Builder. Этот код, даже не придется писать самостоятельно, Lombok включает аннотацию @Builder, которая добавляет билдер прямо в наш класс.
И использование:
Здесь вначале вызывается статический метод builder(), который возвращает объект для сборки. Затем, после того как объект собран вызывается build(), который возвращает наш объект.



