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