Gymterview
middle

Что такое паттерн Factory Method и Abstract Factory?

Factory Method – паттерн, определяющий интерфейс для создания объекта, но позволяющий подклассам решать, какой класс создавать. Abstract Factory – интерфейс для создания семейств связанных объектов без указания конкретных классов.

Критерий Factory Method Abstract Factory
Что создаёт Один продукт Семейство связанных продуктов
Суть Выбор реализации Согласованность семейства
Расширение Новый подкласс фабрики Новая фабрика для семейства
Пример в JDK Calendar.getInstance() UIManager (Swing Look&Feel)
Factory Method -- пример
interface Notification {
    void send(String message);
}

class EmailNotification implements Notification {
    public void send(String message) { /* отправка email */ }
}
class SmsNotification implements Notification {
    public void send(String message) { /* отправка SMS */ }
}
class PushNotification implements Notification {
    public void send(String message) { /* push-уведомление */ }
}

// Фабричный метод
class NotificationFactory {
    static Notification create(String type) {
        return switch (type) {
            case "email" -> new EmailNotification();
            case "sms"   -> new SmsNotification();
            case "push"  -> new PushNotification();
            default -> throw new IllegalArgumentException("Unknown type: " + type);
        };
    }
}

// Использование
Notification notification = NotificationFactory.create("email");
notification.send("Привет!");
Abstract Factory -- пример
interface UIFactory {
    Button createButton();
    TextField createTextField();
}

class MaterialUIFactory implements UIFactory {
    public Button createButton() { return new MaterialButton(); }
    public TextField createTextField() { return new MaterialTextField(); }
}
class IOSUIFactory implements UIFactory {
    public Button createButton() { return new IOSButton(); }
    public TextField createTextField() { return new IOSTextField(); }
}

Важное

  • В Spring: BeanFactory – реализация Factory; FactoryBean<T> – кастомная фабрика бинов
  • switch с sealed interface – современная реализация Factory в Java 21+

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

  • Factory для одной реализации – если нет вариативности, фабрика не нужна
  • God Factory – фабрика, знающая о 50 типах; лучше разбить на несколько

Как используется в 2026

  • Spring создаёт бины через фабрику (ApplicationContext)
  • @ConditionalOnProperty – условное создание бинов, фабрика на уровне конфигурации

На собеседовании: ключевое – чётко разграничить Factory Method (один продукт, выбор реализации) и Abstract Factory (семейство продуктов, согласованность). Частая ошибка – смешивать их или не привести пример из Spring.