Що таке патерн Abstract Factory?
Abstract Factory (Абстрактна фабрика) - це породжувальний патерн проєктування, який дозволяє створювати сімейства взаємопов'язаних об'єктів без вказівки їхніх конкретних класів.
1. Основна ідея
Якщо в системі є кілька груп пов'язаних продуктів (наприклад, інтерфейс для Windows і для macOS), то Abstract Factory надає єдиний інтерфейс, через який можна створювати сумісні об'єкти для кожної групи.
Клієнт при цьому не знає, які саме класи створюються - він працює лише з абстракціями.
2. Коли використовується
- Коли потрібно забезпечити сумісність створюваних об'єктів (наприклад, кнопка, вікно і меню мають належати одній платформі).
- Коли система має бути незалежна від конкретних класів, з якими працює.
- Коли потрібно легко перемикати сімейства продуктів (наприклад, з теми «світла» на «темну»).
3. Структура
- AbstractFactory - оголошує інтерфейс створення об'єктів різних типів.
- ConcreteFactory - реалізує інтерфейс і створює конкретні продукти.
- AbstractProductA/B - інтерфейси окремих продуктів.
- ConcreteProductA/B - конкретні реалізації.
- Client - використовує лише абстрактні інтерфейси, не знаючи конкретних класів.
4. Приклад (Java)
java
// Абстрактні продукти
interface Button { void paint(); }
interface Checkbox { void paint(); }
// Конкретні продукти
class WinButton implements Button {
public void paint() { System.out.println("Windows Button"); }
}
class MacButton implements Button {
public void paint() { System.out.println("Mac Button"); }
}
// Абстрактна фабрика
interface GUIFactory {
Button createButton();
Checkbox createCheckbox();
}
// Конкретні фабрики
class WinFactory implements GUIFactory {
public Button createButton() { return new WinButton(); }
public Checkbox createCheckbox() { return new WinCheckbox(); }
}
class MacFactory implements GUIFactory {
public Button createButton() { return new MacButton(); }
public Checkbox createCheckbox() { return new MacCheckbox(); }
}5. Переваги
- Гарантує сумісність продуктів усередині одного сімейства.
- Ізолює клієнтський код від конкретних класів.
- Полегшує додавання нових сімейств продуктів.
6. Недоліки
- Додавання нового типу продукту вимагає зміни інтерфейсу всіх фабрик (порушує OCP).
- Збільшує кількість класів і абстракцій.
Підсумок: Abstract Factory створює цілі набори пов'язаних об'єктів (а не один, як Factory Method), забезпечуючи їхню узгодженість і легке перемикання між сімействами продуктів.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.