Вопрос с собеседования · Java

Почему паттерн Builder особенно удобен при создании неизменяемых объектов?

MiddleПаттерны проектирования
Коротко

У неизменяемого объекта без билдера два плохих варианта: сеттеры (и он уже изменяем) или конструктор с длинным списком однотипных аргументов. Builder собирает состояние по именованным шагам, проверяет все инварианты в build() и отдаёт готовый неизменяемый объект.

  • Нет «полусобранного» объекта, видимого другим
  • Необязательные параметры без телескопических конструкторов
  • JDK: HttpRequest.newBuilder(), StringBuilder (неизменяемый String в конце)

А ещё Lombok @Builder; для record — компактный конструктор и withers

Подробно

Без билдера у неизменяемого объекта остаются два плохих варианта: сеттеры (и тогда он уже не immutable) или конструктор с восемью аргументами одного типа. Билдер Блоха решает обе проблемы: именованные шаги вместо позиционных аргументов и проверка всех инвариантов разом в build(). Примеры в JDK: HttpRequest.newBuilder() из Java 11, Stream.builder(), Locale.Builder.

Что хотят услышать

  • Проблема конструкторов и сеттеров.
  • Валидация в build.

Частые ошибки

  • Считать StringBuilder примером этого паттерна — это изменяемый буфер, совпало только название.
  • Путать Builder Блоха (борьба с телескопическими конструкторами) с Builder GoF (Director и разные представления).

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Билдер делает объект потокобезопасным при публикации
  • ✗Билдер позволяет менять поля объекта после создания
  • ✓Объект собирается по частям и отдаётся готовым, с проверкой в build()
  • ✗Билдер добавляет объекту сеттеры, но не нарушает его неизменяемость снаружи

Что спросят дальше

  • Чем Builder GoF отличается от Builder Блоха?
  • Что делает Lombok @Builder?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования