Абстрактная фабрика - это шаблон творческого дизайна, опубликованный «Бандой четырех». Его цель состоит в том, чтобы «предоставить интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов». (стр. 87) Обратите внимание, что [factory-method] - это отдельный шаблон GoF, и помимо GoF существуют дополнительные [factory] шаблоны.
Шаблон абстрактной фабрики применяет тему для группы связанных объектов. Канонический пример из книги GoF - это стандарт внешнего вида, применяемый в группе виджетов GUI. Это реализуется пятью участниками. (страница 89)
blockquote>
- AbstractFactory (например, WidgetFactory) - объявляет интерфейс для операций, которые создают
AbstractProduct
объекты.- ConcreteFactory (например, MotifWidgetFactory, PMWidgetFactory) - реализует операции для создания
ConcreteProduct
объектов.- AbstractProduct (например, Window, ScrollBar) - объявляет интерфейс для типа объекта продукта.
- ConcreteProduct (например, MotifWindow, MotifScrollBar) - определяет объект продукта, который будет создан соответствующим
ConcreteFactory
, и реализует интерфейсAbstractProduct
.- Клиент - использует только интерфейсы, объявленные классами
AbstractFactory
иAbstractProduct
.Банда четырех предлагает следующие критерии для применения шаблона абстрактной фабрики. (стр. 88)
Используйте шаблон Abstract Factory, когда
blockquote>
- система должна быть независимой от того, как ее продукты создаются, составляются и представляются.
- Система должна быть настроена с одним из нескольких семейств продуктов.
- Семейство связанных объектов продукта разработано для совместного использования, и вам необходимо применить это ограничение.
- вы хотите предоставить библиотеку классов продуктов, и вы хотите раскрыть только их интерфейсы, а не их реализации.
Шаблон имеет следующие последствия. (страница 89)
blockquote>
- Он выделяет конкретные классы.
- Это облегчает обмен семействами продуктов.
- Это способствует согласованности между продуктами.
- Поддерживать новые виды продукции сложно.
Более подробное описание книги GoF см. В Abstract Factory .
Обратите внимание, что «Банда четырех» опубликовала два различных фабричных паттерна, другой - фабричный метод . Кроме того, за пределами книги GoF существуют фабричные шаблоны, поэтому сам по себе термин « factory » является неоднозначным.