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