Получить доступ

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

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

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

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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем