0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Билдер (Builder) это шаблон проектирования, который используется там, где есть необходимость постепенного создания объекта, таким образом, чтобы гарантировалась его целостность, то есть то, что он создан целиком и полностью так, как это предполагалось.</p>
1
<p>Билдер (Builder) это шаблон проектирования, который используется там, где есть необходимость постепенного создания объекта, таким образом, чтобы гарантировалась его целостность, то есть то, что он создан целиком и полностью так, как это предполагалось.</p>
2
<p>Рассмотрим этот шаблон на примере конфигуратора машины. Возможно, вы встречались с таким на сайте автопроизводителей, когда они предлагают собрать свою версию машину выбрав цвет, кузов, версию двигателя, дополнительные опции и тому подобное.</p>
2
<p>Рассмотрим этот шаблон на примере конфигуратора машины. Возможно, вы встречались с таким на сайте автопроизводителей, когда они предлагают собрать свою версию машину выбрав цвет, кузов, версию двигателя, дополнительные опции и тому подобное.</p>
3
<p>Для реализации подобного конфигуратора нам понадобится класс описывающий машину со всеми возможными опциями. В процессе работы будет создаваться объект этого класса, который затем наполняется нужными данными. Так как данные появляются не одновременно, а по мере работы с конфигуратором, то основной способ наполнения объектов этого класса будет через сеттеры, а не через конструктор.</p>
3
<p>Для реализации подобного конфигуратора нам понадобится класс описывающий машину со всеми возможными опциями. В процессе работы будет создаваться объект этого класса, который затем наполняется нужными данными. Так как данные появляются не одновременно, а по мере работы с конфигуратором, то основной способ наполнения объектов этого класса будет через сеттеры, а не через конструктор.</p>
4
<p>Пример использования:</p>
4
<p>Пример использования:</p>
5
<p>Это абсолютно рабочий подход, но в некоторых ситуациях, он может приводить к проблеме. Так как объект заполняется постепенно, то вполне возможно, что он не будет заполнен правильно до конца. В идеале хотелось бы создать объект через конструктор передав туда сразу все обязательные параметры.</p>
5
<p>Это абсолютно рабочий подход, но в некоторых ситуациях, он может приводить к проблеме. Так как объект заполняется постепенно, то вполне возможно, что он не будет заполнен правильно до конца. В идеале хотелось бы создать объект через конструктор передав туда сразу все обязательные параметры.</p>
6
<p>В таком случае мы можем пойти следующим путем. Начнем собирать данные в другом объекте, который в конце процесса сбора данных создаст нужный объект Car. Гипотетический код может выглядеть так:</p>
6
<p>В таком случае мы можем пойти следующим путем. Начнем собирать данные в другом объекте, который в конце процесса сбора данных создаст нужный объект Car. Гипотетический код может выглядеть так:</p>
7
<p>Это и есть реализация шаблона проектирования<strong>Builder</strong>. Этот код, даже не придется писать самостоятельно, Lombok включает аннотацию @Builder, которая добавляет билдер прямо в наш класс.</p>
7
<p>Это и есть реализация шаблона проектирования<strong>Builder</strong>. Этот код, даже не придется писать самостоятельно, Lombok включает аннотацию @Builder, которая добавляет билдер прямо в наш класс.</p>
8
<p>И использование:</p>
8
<p>И использование:</p>
9
<p>Здесь вначале вызывается статический метод builder(), который возвращает объект для сборки. Затем, после того как объект собран вызывается build(), который возвращает наш объект.</p>
9
<p>Здесь вначале вызывается статический метод builder(), который возвращает объект для сборки. Затем, после того как объект собран вызывается build(), который возвращает наш объект.</p>