Шаблон фасада: предоставляет унифицированный - упрощенный интерфейс для сложной подсистемы или набора интерфейсов. Он обеспечивает интерфейс более высокого уровня, одновременно отделяющий клиента от сложной подсистемы.
Пример, который поможет вам понять ... водитель такси. Вы говорите таксисту «Возьми меня в PointX» (унифицированный упрощенный высокоуровневый интерфейс), который затем начинает последовательность действий (поворачивает ключ, переключает передачи, нажимает акселератор и т. Д.) Для выполнения задачи. Он отвлекает внимание от сложности основных подсистем (коробка передач, двигатель и т. Д.), Чтобы вам не приходилось о них беспокоиться.
Водитель также отделяет вас от фактического транспортного средства, используемого ... вы не взаимодействуете непосредственно с автомобилем. Вы могли бы потенциально дать ему Merc, но ваш интерфейс с драйвером все равно будет TakeMeTo (X) ... вы не привязаны к какой-либо конкретной модели / марке автомобиля.
В примере с реальным миром вы найдете фасады, где вы взаимодействуете со сторонними компонентами или библиотеками. Вы не хотите, чтобы ваш код зависел от конкретного поставщика, поэтому вы вводите интерфейс фасада для развязки. Также вы упростите этот интерфейс, например, ваш интерфейс фасада будет иметь метод с именем SendData (string), но внутренне реализация может вызвать n методов для m подпакетов в определенном порядке, чтобы выполнить задачу. Это то, что показывает диаграмма на странице википедии.
например. Перевод примера в C ++ и сохранение его крошечным
sResource = LWCPPSimple::get("http://www.perl.org")
Здесь вымышленная библиотека для WWW в C ++ - это фасад, объединяющий аспекты проблемы с протоколом, сетью и синтаксическим анализом, так что я могу сосредоточиться на своей основной задаче получения ресурса. Метод get скрывает / инкапсулирует / удерживает в одном месте сложность (и в некоторых случаях уродливость) HTTP, FTP и других разнообразных протоколов, запрос-ответ, управление соединением и т. Д. Также, если завтра создатели LWCPPSimple найдут способ сделать get () в два раза быстрее, я получаю преимущества производительности бесплатно. Код моего клиента не должен изменяться.