Абстрактная фабрика - это шаблон творческого дизайна, опубликованный «Бандой четырех». Его цель состоит в том, чтобы «предоставить интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов». (стр. 87) Обратите внимание, что [factory-method] - это отдельный шаблон GoF, и помимо GoF существуют дополнительные [factory] шаблоны.

Шаблон абстрактной фабрики применяет тему для группы связанных объектов. Канонический пример из книги GoF - это стандарт внешнего вида, применяемый в группе виджетов GUI. Это реализуется пятью участниками. (страница 89)

  • AbstractFactory (например, WidgetFactory) - объявляет интерфейс для операций, которые создают AbstractProduct объекты.
  • ConcreteFactory (например, MotifWidgetFactory, PMWidgetFactory) - реализует операции для создания ConcreteProduct объектов.
  • AbstractProduct (например, Window, ScrollBar) - объявляет интерфейс для типа объекта продукта.
  • ConcreteProduct (например, MotifWindow, MotifScrollBar) - определяет объект продукта, который будет создан соответствующим ConcreteFactory, и реализует интерфейс AbstractProduct.
  • Клиент - использует только интерфейсы, объявленные классами AbstractFactory и AbstractProduct.

Банда четырех предлагает следующие критерии для применения шаблона абстрактной фабрики. (стр. 88)

Используйте шаблон Abstract Factory, когда

  • система должна быть независимой от того, как ее продукты создаются, составляются и представляются.
  • Система должна быть настроена с одним из нескольких семейств продуктов.
  • Семейство связанных объектов продукта разработано для совместного использования, и вам необходимо применить это ограничение.
  • вы хотите предоставить библиотеку классов продуктов, и вы хотите раскрыть только их интерфейсы, а не их реализации.

Шаблон имеет следующие последствия. (страница 89)

  • Он выделяет конкретные классы.
  • Это облегчает обмен семействами продуктов.
  • Это способствует согласованности между продуктами.
  • Поддерживать новые виды продукции сложно.

Более подробное описание книги GoF см. В Abstract Factory .

Обратите внимание, что «Банда четырех» опубликовала два различных фабричных паттерна, другой - . Кроме того, за пределами книги GoF существуют фабричные шаблоны, поэтому сам по себе термин « factory » является неоднозначным.