Проблема | Создать семейство взаимосвязанных или взаимозависимых обьектов (не специфицируя их конкретных классов). |
Решение | Создать абстрактный класс, в котором объявлен интерфейс для создания конкретных классов. |
Пример | Какой класс должен отвечать за создание обьектов - адаптеров при использовании паттерна "Адаптер", см. . Если подобные объекты создаются неким объектом уровня предметной области, то будет нарушен принцип разделения обязанностей. |
Преимущества | Изолирует конкретные классы. Поскольку "Абстрактная фабрика" инкапсулирует ответственность за создание классов и сам процесс их создания, то она изолирует клиента от деталей реализации классов. Упрощена замена "Абстрактной фабрики", поскольку она используется в приложении только один раз при инстанцировании. |
Недостатки | Интерфейс "Абстрактной фабрики" фиксирует набор обьектов, которые можно создать. Расширение "Абстрактной фабрики" для изготовления новых обьектов часто затруднительно. |