Чим Abstract Factory відрізняється від Factory Method?
Abstract Factory і Factory Method вирішують схожі задачі, інкапсулюють створення об'єктів, але на різних рівнях абстракції.
1. Масштаб задачі
- Factory Method створює один об'єкт (один тип продукту).
- Abstract Factory створює сімейство взаємопов'язаних об'єктів (кілька типів, які мають працювати разом).
Приклад:
Factory Method створює одну кнопку (Button).
Abstract Factory створює цілий набір елементів інтерфейсу - кнопку, чекбокс і вікно - сумісних між собою (наприклад, усі в стилі macOS).
2. Реалізація
- Factory Method реалізується через успадкування: підкласи перевизначають фабричний метод.
- Abstract Factory використовує композицію: містить набір фабричних методів для різних продуктів.
java
// Factory Method
abstract class Dialog {
abstract Button createButton();
}
// Abstract Factory
interface GUIFactory {
Button createButton();
Checkbox createCheckbox();
}3. Відношення між ними
Abstract Factory часто будується на основі кількох Factory Method. Кожен метод усередині Abstract Factory може бути фабричним методом для окремого типу продукту.
4. Коли застосовувати
- Factory Method: коли потрібно дозволити підкласам вибирати, який об'єкт створити.
- Abstract Factory: коли потрібно створювати цілі комплекти взаємопов'язаних об'єктів, не залежачи від конкретних реалізацій.
5. Ключова відмінність
| Критерій | Factory Method | Abstract Factory |
|---|---|---|
| Масштаб | Один продукт | Сімейство продуктів |
| Механізм | Успадкування | Композиція |
| Розширення | Додавання нових типів через підкласи | Додавання нових сімейств продуктів |
| Приклад | Створення кнопки | Створення GUI-комплекту |
Підсумок: Factory Method відповідає на питання «який саме об'єкт створити?», Abstract Factory - «які пов'язані об'єкти створити разом?».
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.