Abstract Factory VERSUS Factory Method
---
D:\VC25\Otus\Py\projects\des_patterns\2_abstract_factory
Паттерны «Фабричный метод» и «Абстрактная фабрика» — это два похожих, но отличающихся подхода к созданию объектов.
Оба паттерна решают проблему создания объектов, но решают её разными способами и преследуют разные цели.
Основные различия:
1. Уровень абстракции
- Фабричный метод:
- создает единичные объекты определенного типа.
- Он определяет метод создания объекта, но оставляет решение о том, какой именно объект создать, конкретным подклассам.
- Абстрактная фабрика:
- создает целые семейства объектов, которые зависят друг от друга и принадлежат одной тематике.
- Она не просто создает один объект,
- а формирует набор объектов, согласованных между собой.
2. Гибкость и расширение
- Фабричный метод: обеспечивает свободу в выборе конкретного типа объекта, который нужно создать.
- Например, можно создать разные виды автомобилей, используя один и тот же метод фабрики.
- Абстрактная фабрика: предоставляет возможность создавать несколько взаимосвязанных объектов сразу.
- Это позволяет создавать целостные комплексы объектов, которые поддерживают общее семантическое соглашение
- (например, набор UI-элементов, принадлежащих одной теме оформления).
3. Способ задания зависимости
- Фабричный метод:
- вызывает фабричный метод непосредственно в клиентском коде, а подклассы выбирают конкретный объект для создания.
- Абстрактная фабрика:
- использует абстрактный интерфейс для создания набора объектов,
- а конкретные фабрики предоставляют реализации для создания конкретных наборов объектов.
4. Степень контроля над созданием объектов
- Фабричный метод:
- дает контроль над созданием одного объекта за раз.
- Абстрактная фабрика:
- дает контроль над созданием целой группы объектов одновременно.
Пример сравнения:
Ситуация 1: Выбор автомобиля
- Фабричный метод:
- фабрика производит автомобили разных марок (BMW, Mercedes, Tesla).
- Клиент вызывает фабричный метод и получает машину желаемого бренда.
- Абстрактная фабрика:
- фабрика производит комплектацию автомобиля (корпус, мотор, колеса).
- Каждая фабрика отвечает за производство полной комплектации машины (спортивная машина, внедорожник, седан),
- включающей согласованные между собой комплектующие.
Ситуация 2: Создание графического интерфейса
- Фабричный метод:
- фабрика создает кнопки, выпадающие списки, текстовые поля и другие элементы интерфейса.
- При этом клиент сам выбирает, какой элемент создать.
- Абстрактная фабрика:
- фабрика создает целый набор элементов интерфейса (кнопки, чекбоксы, текстовые поля),
- принадлежащий одной теме оформления (например, "тёмная тема" или "светлая тема").
- Фабрики специализируются на создании наборов элементов, подходящих друг к другу по стилю.
В итоге:
- Фабричный метод хорош,
- когда нужно создать единственный объект определенного типа и дать возможность подклассам выбирать конкретный тип объекта.
- Абстрактная фабрика полезна, когда нужно создать целое семейство взаимосвязанных объектов,
- принадлежащих одной тематике или цели,
- и гарантировать, что они будут соответствовать друг другу.
Выбор паттерна зависит от того, насколько сложной и обширной должна быть система создания объектов.
Комментариев нет:
Отправить комментарий