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

Чем Integer.valueOf(127) отличается от паттерна Factory Method по GoF?

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

Factory Method (GoF) построен на наследовании: базовый класс объявляет метод создания, а какой продукт создать — решает подкласс. Integer.valueOf — статическая фабрика (идиома Effective Java): обычный статический метод вместо конструктора, без иерархии создателей.

  • Статическая фабрика может вернуть кэшированный объект (Integer: −128…127) или подтип
  • Factory Method в JDK: Collection.iterator() — каждая коллекция создаёт свой итератор
  • Путаница терминов частая — интервьюер проверяет именно её

А ещё В Spring «фабричный метод» — ещё и @Bean-метод, создающий бин

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

Подробно

Factory Method по GoF строится на полиморфизме: базовый класс объявляет метод создания, конкретный класс продукта выбирает подкласс. Integer.valueOf — статическая фабрика из Effective Java: у неё есть имя, она не обязана создавать новый объект (берёт из кэша -128..127) и может вернуть подтип. Пример настоящего Factory Method в JDK — Collection.iterator(): каждая коллекция создаёт свой итератор.

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

  • Наследование и полиморфизм у GoF против статического метода.
  • Пример каждого из JDK.

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

  • Называть любой метод со словом factory паттерном Factory Method.
  • Забывать, что статическая фабрика может возвращать кэшированный объект — отсюда ловушка == на Integer.

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

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

Показать варианты и ответ
  • ✓Это статическая фабрика Блоха: выбор происходит внутри статического метода, а не через полиморфную подстановку подкласса
  • ✗Ничем — это и есть классический Factory Method
  • ✗Это Abstract Factory, потому что создаётся семейство обёрток
  • ✗Это Prototype, потому что объект берётся из кэша копированием

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

  • Какие преимущества у статической фабрики перед конструктором?
  • Приведите пример Factory Method в JDK.

Разбор темы

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

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

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

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

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