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.