Я собираюсь начать серию статей, объясняющих паттерны проектирования на примерах кода Java. Это может быть полезно для всех, кто хочет погрузиться в эти распространенные методы проектирования ООП. Лучший способ освоить что-либо — это практиковаться.

Строитель

Builder — это творческий шаблон проектирования, который предоставляет альтернативный способ построения сложных объектов. Этот шаблон следует использовать, когда мы хотим создавать разные неизменяемые объекты, используя один и тот же процесс построения объектов.

Шаблон "Строитель" направлен на "отделение построения сложного объекта от его представления, чтобы один и тот же процесс построения мог создать несколько разных представлений".

Теперь предположим, что нам нужно создать объект Employee, который имеет следующие 5 атрибутов, т. е. firstName, secondName, yearOfBirth, employeeId, registrationAddress.

А что если только firstName ,secondName, employeeId являются обязательными, а остальные поля необязательными? Нам нужно больше конструкторов:

Эта проблема называется проблемой телескопических конструкторов. Только представьте, сколько конструкторов потребуется для большего количества атрибутов.

Паттерн Builder может быть описан в классе, который имеет один метод создания и несколько методов для настройки результирующего объекта. Методы компоновщика часто поддерживают цепочку, например ObjectBuilder()->attrubute1(1)->attribute2(2)->build()).

Валидации полей для краткости опущены (если значение поля недействительно, следует выбросить IllegalArgumentException). Имейте в виду, что созданный выше объект не имеет никакого метода установки, поэтому его состояние нельзя изменить после его создания. Это обеспечивает желаемую неизменность.

Использование шаблона:

Аннотация Ломбок @Builder

@Builder проекта Lombok — это простой способ использования шаблона без написания шаблонного кода. Вот пример:

И пример использования в коде:

Заключение

Плюсы строительного шаблона

  • Гибкость дизайна и гораздо более читаемый код.
  • Параметры конструктора сокращены и предоставляются в хорошо читаемых цепочках вызовов методов. Таким образом, нет необходимости передавать null для необязательных параметров конструктору при создании экземпляра класса.
  • Экземпляр всегда создается в завершенном состоянии.
  • Мы можем создавать неизменяемые объекты без особой сложной логики в процессе создания объектов.

Минусы шаблона Builder

  • Шаблон требует много кода

Используйте шаблон Builder, когда

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

Использование Builder в основных библиотеках Java:

Чтобы увидеть более подробную информацию о приведенных примерах кода, посетите мой репозиторий Design-Patterns на GitHub.