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

Абстра́ктна фа́брика (англ. 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. Процитовано 12 вересня 2012.

Джерела

Примітки

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

Література

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


This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.