Skip to main content

Чим 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 MethodAbstract Factory
МасштабОдин продуктСімейство продуктів
МеханізмУспадкуванняКомпозиція
РозширенняДодавання нових типів через підкласиДодавання нових сімейств продуктів
ПрикладСтворення кнопкиСтворення GUI-комплекту

Підсумок: Factory Method відповідає на питання «який саме об'єкт створити?», Abstract Factory - «які пов'язані об'єкти створити разом?».

Коротка відповідь

Для співбесіди
Premium

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