Паттерн "Абстрактная фабрика" (Abstract Factory) в Java — семейства совместимых клиентов
Обзор — в порождающих паттернах. Здесь — практический Abstract Factory на Java для провайдеров уведомлений.
Задача паттерна
Abstract Factory создает семейства связанных объектов без привязки клиентского кода к конкретным классам.
Если система переключается между провайдерами целиком (AWS, Firebase), фабрика гарантирует, что все созданные клиенты совместимы между собой.
Пример — уведомления по провайдерам
interface EmailSender {
void send(String to, String message);
}
interface SmsSender {
void send(String phone, String message);
}
interface NotificationFactory {
EmailSender createEmailSender();
SmsSender createSmsSender();
}
class AwsEmailSender implements EmailSender {
@Override
public void send(String to, String message) {
System.out.println("AWS SES -> " + to);
}
}
class AwsSmsSender implements SmsSender {
@Override
public void send(String phone, String message) {
System.out.println("AWS SNS -> " + phone);
}
}
class AwsNotificationFactory implements NotificationFactory {
@Override
public EmailSender createEmailSender() {
return new AwsEmailSender();
}
@Override
public SmsSender createSmsSender() {
return new AwsSmsSender();
}
}
NotificationFactory factory = new AwsNotificationFactory();
EmailSender email = factory.createEmailSender();
SmsSender sms = factory.createSmsSender();
Клиенту не нужно знать детали AWS/Firebase классов.
Отличие от Factory Method
| Паттерн | Что создаёт |
|---|---|
| Factory Method | Один продукт |
| Abstract Factory | Семейство продуктов |
Подробнее про Factory Method — 136.
Когда применять и минусы
Подходит, если нужны целые наборы совместимых компонентов (драйверы БД, UI-темы, облачные SDK).
Минус: добавить новый тип продукта (например, PushSender) сложно — нужно менять интерфейс фабрики и все ее реализации.
См. также
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Паттерн — это повторяющийся шаблон, узор или схема. Паттерны встречаются повсюду — в природе, архитектуре, поведении людей и, конечно, в программировании. Порождающие паттерны проектирования — это группа шаблонов, направленных на решение задач, связанных с созданием объектов. Структурные паттерны — это группа шаблонов проектирования, решающих задачи организации классов и объектов таким образом, чтобы обеспечить гибкую архитектуру программного обеспечения. Поведенческие паттерны — это группа шаблонов проектирования, которые определяют способы взаимодействия объектов и распределения ответственности между ними. Архитектурные паттерны — это проверенные решения для организации структуры программного обеспечения. Интеграция систем — одна из центральных задач в современной разработке программного обеспечения. Паттерны доменного моделирования представляют собой проверенные решения для организации бизнес-логики в программных системах. Паттерн Strategy в C# — классическая реализация через интерфейс, замена на Func и Action, DI и критерии выбора без лишних абстракций. Паттерн Iterator в C# — ручной IEnumerator, генерация итератора компилятором через yield return, ленивость, LINQ и случаи, когда класс писать всё же нужно. Abstract Factory в C# и .NET — классическая схема через интерфейсы, замена через DI-контейнер, фабричный делегат и keyed services в .NET 8. Паттерн Command в C# — классическая схема, делегаты, MediatR, очередь задач, undo и критерии выбора между объектом команды и простым вызовом сервиса. Паттерн Observer в C# — event и делегаты, IObservable IObserver, слабая связанность, отписка и как не поймать утечки памяти в долгоживущих сервисах.Обзор паттернов проектирования
Порождающие паттерны
Структурные паттерны
Поведенческие паттерны
Архитектурные паттерны
Паттерны интеграции внешних систем
Паттерны проектирования доменных моделей
Стратегия в C#
Итератор в C#
Фабрика в C#
Команда в C#
Наблюдатель в C#