Вопрос проверяет понимание различий между простыми и составными порождающими паттернами
Обычная фабрика отвечает за создание одного типа объектов или одной иерархии. Абстрактная фабрика создаёт семейства связанных объектов, которые должны использоваться вместе. Клиентский код работает только с абстракциями и не знает конкретных реализаций. Абстрактная фабрика позволяет легко менять целое семейство реализаций. Это удобно при поддержке разных конфигураций приложения.
Различие между фабрикой и абстрактной фабрикой проявляется в масштабе ответственности.
Abstract Factory — паттерн, предоставляющий интерфейс для создания семейств взаимосвязанных объектов.
Обычная фабрика:
создаёт один объект
инкапсулирует логику выбора реализации
возвращает абстракцию
Абстрактная фабрика:
определяет набор методов создания
создаёт связанные объекты
гарантирует их совместимость
protocol UIFactory {
func makeButton() -> Button
func makeLabel() -> Label
}
поддержка разных тем или платформ
разные окружения приложения
комплексная сборка UI
Если нужно создавать один объект — достаточно фабрики. Если нужно создавать согласованный набор объектов — применяется абстрактная фабрика.