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

Какие преимущества даёт статическая фабрика по сравнению с публичным конструктором?

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

Три плюса из Effective Java: имя (of, copyOf, ofNullable — различимы, в отличие от конструкторов с одной сигнатурой), не обязана создавать новый объект (кэш, синглтон), может вернуть подтип (EnumSet.noneOf отдаёт RegularEnumSet или JumboEnumSet).

  • Тип результата может даже не существовать на момент написания (ServiceLoader)
  • Минусы: класс только со статическими фабриками нельзя наследовать; фабрики хуже видны в документации
  • Соглашения имён: of, from, valueOf, getInstance, newInstance, create

А ещё List.of, Optional.of, Path.of — современные примеры

Подробно

Три классических плюса из Effective Java. Имя: of и copyOf различимы, а два конструктора с одинаковой сигнатурой невозможны. Кэширование: Integer.valueOf берёт из кэша, Boolean.valueOf возвращает константу. Подтип: EnumSet.noneOf отдаёт RegularEnumSet или JumboEnumSet в зависимости от размера, а клиент видит только EnumSet. Потокобезопасность объекта из способа создания никак не следует.

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

  • Три преимущества с примерами.
  • Недостатки.

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

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

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

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓У неё есть имя, поэтому можно иметь несколько способов создания с одинаковой сигнатурой
  • ✓Она не обязана создавать новый объект при каждом вызове
  • ✓Она может вернуть объект любого подтипа объявленного типа возврата
  • ✗Она гарантирует потокобезопасность создаваемого объекта без дополнительной синхронизации

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

  • Какие минусы у статической фабрики?
  • Как это связано с Flyweight?

Разбор темы

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

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

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

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

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