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

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

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

Призначення

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

Застосування

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

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

Структура

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


Переваги

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

Недоліки

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

Відносини

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

Реалізація

C++

Swift

PHP

Примітки

Джерела

Примітки

Література

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


🔥 Top keywords: Шеннен ДогертіГоловна сторінкаЧемпіонат Європи з футболуЧемпіонат Європи з футболу 202459-та окрема мотопіхотна бригада (Україна)Спеціальна:ПошукЛамін ЯмальЗбірна Іспанії з футболуЧемпіонат Європи з футболу 2020Збірна Англії з футболуДональд ТрампДень Української ДержавностіДень взяття БастиліїРекордні температури повітря в УкраїніYouTubeПрезидентські вибори у США 2024Джо БайденФАБ-3000Чемпіонат світу з футболуУсі жінки — відьмиУкраїнаНіко ВільямсAR-15Карлос АлькарасЧемпіонат Європи з футболу 2012Фінал чемпіонату Європи з футболу 2024Список замахів на президентів СШАЧемпіонат світу з футболу 2026Список президентів СШАТериторіальний центр комплектування та соціальної підтримкиРональд РейганДжон Фіцджеральд КеннедіЛюк ПерріЕль-НіньйоНаціональна суспільна телерадіокомпанія УкраїниГаррі КейнЗамах на Дональда ТрампаКріштіану РоналдуРайон Беверлі-Гіллз