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

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

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

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

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

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

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

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

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

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

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