Паттерн "Строитель" (Builder) в Java — сложная конфигурация без telescoping constructor
Модель и масштаб — Основы БД, опорные темы, проектирование БД, пакетная работа. Карта — о разделе.
Базовый обзор паттерна — в порождающих паттернах. Здесь — практический 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 обязательных параметра, без множества опций |
| Builder | 4+ параметра, часть опциональна, нужен fluent API |
Telescoping constructor (new X(a,b,c,d,e,...)) хуже читается и чаще даёт ошибки порядка аргументов.
Когда использовать
- Конфигурации клиента API, подключения к БД, job-пайплайнов.
- DTO/command-объекты с множеством опций.
- immutable-модели, где нужна валидация перед созданием.
Риски и ограничения
Минус Builder — дублирование полей в Builder и в самом объекте.
В Java-проектах часто применяют Lombok @Builder, AutoValue или Immutables.
Это ускоряет разработку, но не отменяет архитектурный выбор, когда Builder действительно нужен.