Перейти к основному содержимому

Паттерн "Строитель" (Builder) в Java — сложная конфигурация без telescoping constructor

Разработчику Архитектору
Теория данных (раздел 3)

Базовый обзор паттерна — в порождающих паттернах. Здесь — практический Builder на Java для объекта с множеством опциональных настроек.

Play ITЗагрузка интерактивного демо…


Задача паттерна

Builder разделяет процесс создания сложного объекта и его представление. Вместо конструктора с длинным списком аргументов клиент задаёт параметры шагами через понятные методы.

Паттерн помогает в трёх случаях:

  • параметров много;
  • часть параметров опциональна;
  • объект должен остаться immutable после build().

Пример — HTTP-клиент с настройками

Код ITЗагрузка примера кода…

HttpClient client = new HttpClient.Builder("https://api.example.com")
.connectTimeout(3_000)
.header("Authorization", "Bearer token")
.maxRetries(5)
.build();

Map.copyOf(...) в конструкторе защищает от случайной мутации заголовков после сборки.


Builder и конструктор

ПодходКогда подходит
Конструктор2-3 обязательных параметра, без множества опций
Builder4+ параметра, часть опциональна, нужен fluent API

Telescoping constructor (new X(a,b,c,d,e,...)) хуже читается и чаще даёт ошибки порядка аргументов.


Когда использовать

  • Конфигурации клиента API, подключения к БД, job-пайплайнов.
  • DTO/command-объекты с множеством опций.
  • immutable-модели, где нужна валидация перед созданием.

Риски и ограничения

Минус Builder — дублирование полей в Builder и в самом объекте.

Снижение шаблонного кода

В Java-проектах часто применяют Lombok @Builder, AutoValue или Immutables.

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


См. также