Фасад (шаблон проектування)

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

Фаса́д — шаблон проектування, призначений для об'єднання групи підсистем під один уніфікований інтерфейс, надаючи доступ до них через одну точку входу. Це дозволяє спростити роботу з підсистемами.

Фасад належить до структурних шаблонів проектування.

Складові шаблону[ред. | ред. код]

Класи, з яких складається шаблон можна розділити на 3 частини:

  1. фасад;
  2. підсистеми;
  3. клієнти.

Ролі складових[ред. | ред. код]

Фасад[ред. | ред. код]

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

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

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

Клієнт[ред. | ред. код]

  • здійснює запити фасаду;
  • не знає про існування підсистем.

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

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

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

  • Не заважає сучасним клієнтам отримувати доступ до базових класів
  • Фасад не додає жодної функції, він просто спрощує інтерфейси

Випадки використання[ред. | ред. код]

Фасад використовується у випадках, коли потрібно:

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

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

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

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

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