Паттерн "Фабричный метод" (Factory Method) в Java — создание через подклассы
Обзор — в порождающих паттернах. Здесь — Java-практика с делегированием создания подклассам.
Задача паттерна
Factory Method определяет общий метод создания объекта в базовом классе, а конкретный тип продукта выбирают подклассы.
Клиент работает с абстракцией Product и не зависит от new ConcreteProduct().
Пример
interface ReportExporter {
void export(String payload);
}
class PdfExporter implements ReportExporter {
@Override
public void export(String payload) {
System.out.println("PDF export: " + payload);
}
}
class CsvExporter implements ReportExporter {
@Override
public void export(String payload) {
System.out.println("CSV export: " + payload);
}
}
abstract class ExportJob {
protected abstract ReportExporter createExporter();
public final void run(String payload) {
ReportExporter exporter = createExporter();
exporter.export(payload);
}
}
class PdfExportJob extends ExportJob {
@Override
protected ReportExporter createExporter() {
return new PdfExporter();
}
}
class CsvExportJob extends ExportJob {
@Override
protected ReportExporter createExporter() {
return new CsvExporter();
}
}
ExportJob job = new PdfExportJob();
job.run("quarterly report");
Когда использовать
- Нельзя заранее жестко зафиксировать тип создаваемого продукта.
- Хочется расширять систему новыми продуктами без изменения клиентского кода.
- Нужна точка расширения в библиотеке/фреймворке.
Плюсы и минусы
Плюсы:
- меньше связности с конкретными классами;
- проще добавлять новые продукты;
- лучше соблюдается OCP.
Минус: растет число подклассов-фабрик.
См. также
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Паттерн — это повторяющийся шаблон, узор или схема. Паттерны встречаются повсюду — в природе, архитектуре, поведении людей и, конечно, в программировании. Порождающие паттерны проектирования — это группа шаблонов, направленных на решение задач, связанных с созданием объектов. Структурные паттерны — это группа шаблонов проектирования, решающих задачи организации классов и объектов таким образом, чтобы обеспечить гибкую архитектуру программного обеспечения. Поведенческие паттерны — это группа шаблонов проектирования, которые определяют способы взаимодействия объектов и распределения ответственности между ними. Архитектурные паттерны — это проверенные решения для организации структуры программного обеспечения. Интеграция систем — одна из центральных задач в современной разработке программного обеспечения. Паттерны доменного моделирования представляют собой проверенные решения для организации бизнес-логики в программных системах. Паттерн 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#