Skip to main content

Що таке патерн Abstract Factory?

Abstract Factory (Абстрактна фабрика) - це породжувальний патерн проєктування, який дозволяє створювати сімейства взаємопов'язаних об'єктів без вказівки їхніх конкретних класів.


1. Основна ідея

Якщо в системі є кілька груп пов'язаних продуктів (наприклад, інтерфейс для Windows і для macOS), то Abstract Factory надає єдиний інтерфейс, через який можна створювати сумісні об'єкти для кожної групи.

Клієнт при цьому не знає, які саме класи створюються - він працює лише з абстракціями.


2. Коли використовується

  • Коли потрібно забезпечити сумісність створюваних об'єктів (наприклад, кнопка, вікно і меню мають належати одній платформі).
  • Коли система має бути незалежна від конкретних класів, з якими працює.
  • Коли потрібно легко перемикати сімейства продуктів (наприклад, з теми «світла» на «темну»).

3. Структура

  1. AbstractFactory - оголошує інтерфейс створення об'єктів різних типів.
  2. ConcreteFactory - реалізує інтерфейс і створює конкретні продукти.
  3. AbstractProductA/B - інтерфейси окремих продуктів.
  4. ConcreteProductA/B - конкретні реалізації.
  5. 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

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.