printСтруктурирующие паттерны

printФасад

Facade

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

Результаты
1. Паттерн фасад изолирует клиентов от компонентов подсистемы, уменьшая тем самым число объектов, с которыми клиентам приходится иметь дело, и упрощая работу с подсистемой.
2. Зачастую компоненты подсистемы сильно связаны. Ослабление связей между подсистемой и ее клиентами позволяет видоизменять компоненты подсистемы, не затрагивая при этом клиентов. Также сокращение числа зависимостей за счет фасадов может уменьшить количество нуждающихся в повторной компиляции файлов после небольшой модификации какой-нибудь важной подсистемы. Фасад может упростить процесс переноса системы на другие платформы, поскольку уменьшается вероятность того, что в результате изменения одной подсистемы понадобится изменять и все остальные.
3. Фасад не препятствует приложениям напрямую обращаться к классам подсистемы, если это необходимо. Таким образом, у вас есть выбор между простотой и общностью.

Структура
11672.png

Реализация
// Компоненты подсистемы реализуют функциональность подсистемы, 
// выполняют работу, порученную объектом Facade
class Component1 {
public:
  void Operation1();
} component1;
class Component2 {
public:
  void Operation2();
} component2;
//Фасад делегирует запросы клиентов подходящим объектам внутри подсистемы
class Facade {
public:
  void Operation1() { component1.Operation1(); }
  void Operation2() { component2.Operation2(); }
} facade;
// Использование
facade.Operation1();
facade.Operation2();
loading