Skip to content
Pandas edited this page Jun 18, 2017 · 1 revision

Назначение

Предоставляет унифицированный интерфейс вместо набора интерфейсов некоторой подсистемы. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы.

Применимость

Используйте паттерн фасад, когда:

  • Хотите предоставить простой интерфейс к сложной подсистеме.
  • Между клиентами и классами реализации абстракции существует много зависимостей.
  • Вы хотите разложить подсистему на отдельные слои.

Структура

Imgur

Участники

  • Facade - фасад: «знает», каким классам подсистемы адресовать запрос; делегирует запросы клиентов подходящим объектам внутри подсистемы;
  • Классы подсистемы: реализуют функциональность подсистемы; выполняют работу, порученную объектом Facade; ничего не «знают» о существовании фасада, то есть не хранят ссылок на него.

Отношения

Клиенты общаются с подсистемой, посылая запросы фасаду. Он переадресу ет их подходящим объектам внутри подсистемы. Хотя основную работу выполня ют именно объекты подсистемы, фасаду, возможно, придется преобразовать свой интерфейс в интерфейсы подсистемы. Клиенты, пользующиеся фасадом, не имеют прямого доступа к объектам под системы.

Результаты

У паттерна фасад есть следующие преимущества:

  • Изолирует клиентов от компонентов подсистемы, уменьшая тем самым число объектов, с которыми клиентам приходится иметь дело, и упрощая работу с подсистемой;
  • Позволяет ослабить связанность между подсистемой и ее клиентами;
  • Фасад не препятствует приложениям напрямую обращаться к классам подсистемы, если это необходимо.
Clone this wiki locally