Абстрактна фабрика

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Абстра́ктна фа́брика (англ. Abstract Factory) — шаблон проєктування, що забезпечує інкапсуляцію окремих фабрик під єдиною схемою, упускаючи їхню деталізацію. Належить до класу твірних шаблонів.

В типових випадках застосування, клієнтський код створює конкретну реалізацію абстрактної фабрики, а потім використовує загальний універсальний інтерфейс фабрики, для створення екземплярів об'єктів, які є частиною схеми. Клієнтський код не знає (або не бере до уваги), які саме конкретно об'єкти він отримує від цих фабрик, оскільки він використовує універсальний інтерфейс для їхнього створення. Шаблон розмежовує деталі реалізації множини об'єктів від їхнього загального використання в коді, оскільки створення об'єкта здійснюється за допомогою методів, що забезпечуються інтерфейсом фабрики.[1]

Призначення[ред. | ред. код]

Подає інтерфейс для утворення родин взаємозв'язаних або взаємозалежних об'єктів, не специфікуючи їхніх конкретних класів.

Застосування[ред. | ред. код]

Слід використовувати шаблон Абстрактна фабрика коли:

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

Структура[ред. | ред. код]

UML діаграма, що описує структуру шаблону проєктування Абстрактна фабрика
  • AbstractFactory — абстрактна фабрика:
    • оголошує інтерфейс для операцій, що створюють абстрактні об'єкти-продукти;
  • ConcreteFactory — конкретна фабрика:
    • реалізує операції, що створюють конкретні об'єкти-продукти;
  • AbstractProduct — абстрактний продукт:
    • оголошує інтерфейс для типу об'єкта-продукту;
  • ConcreteProduct — конкретний продукт:
    • визначає об'єкт-продукт, що створюється відповідною конкретною фабрикою;
    • реалізує інтерфейс AbstractProduct;
  • Client — клієнт:
    • користується виключно інтерфейсами, котрі оголошенні у класах AbstractFactory та AbstractProduct.


Переваги[ред. | ред. код]

  • ізолює конкретні класи;
  • спрощує заміну сімейств продуктів;
  • гарантує сполучуваність продуктів.

Недоліки[ред. | ред. код]

  • Важко добавити підтримку нового виду продуктів

Відносини[ред. | ред. код]

  • Зазвичай під час виконання створюється єдиний екземпляр класу ConcreteFactory. Ця конкретна фабрика створює об'єкти продукти, що мають досить визначену реалізацію. Для створення інших видів об'єктів клієнт повинен користуватися іншою конкретною фабрикою;
  • AbstractFactory передоручає створення об'єктів продуктів своєму підкласу ConcreteFactory.

Реалізація[ред. | ред. код]

C++[ред. | ред. код]

Swift[ред. | ред. код]

PHP[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Freeman, Eric; Freeman, Elisabeth; Kathy, Sierra; Bert, Bates (2004). Hendrickson, Mike; Loukides, Mike (ред.). Head First Design Patterns (paperback). 1. O'REILLY. с. 162. ISBN 978-0-596-00712-6. Архів оригіналу за 30 квітня 2020. Процитовано 12 вересня 2012. 

Джерела[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Будай, Андрій (2012). Дизайн-патерни — просто, як двері (Українською). с. 90. 

Література[ред. | ред. код]

Алан Шаллоуей, Джеймс Р. Тротт. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию = Design Patterns Explained: A New Perspective on Object-Oriented Design. — М. : «Вильямс», 2002. — 288 с. — ISBN 0-201-71594-5.