Перейти к основному содержимому

Паттерн "Фабричный метод" (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.

Минус: растет число подклассов-фабрик.


См. также

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").