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

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

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

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

Складові шаблону

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

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

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

Ролі складових

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

Фасад

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

Підсистема

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

Клієнт

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

Переваги та недоліки

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

Переваги

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

Недоліки

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

Випадки використання

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

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

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

Зв'язок з іншими патернами

[ред. | ред. код]
  • Фасад створює новий інтерфейс доступу, адаптер — використовує старий

Реалізація

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

Джерела

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