Какие преимущества даёт статическая фабрика по сравнению с публичным конструктором?
Три плюса из 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?
Разбор темы
- Порождающие паттерны
Factory Method против статической фабрики Блоха, Abstract Factory, Builder в двух версиях, Prototype и почему clone() считают ошибкой, object pool — с примерами из JDK и Spring.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.