Паттерн Фасад

Паттерн Фасад — структурный шаблон проектирования, позволяющий скрыть сложность системы путем сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы. Несмотря на мудреное определение, наверное, самый простой шаблон проектирования и очень скоро вы в этом сами сможете убедиться.

Паттерн Фасад
Паттерн Фасад

Реализация: давайте попробуем разработать навигационную систему автомобиля. Перед поездкой водитель будет включать GPS, загружать данные о пробках, прокладывать путь и выключать после поездки. За каждое описанное действие будет отвечать отдельный класс, кроме включения и выключения. И так, класс управления электропитанием GPSPower:

Класс содержит два метода, один включает GPS другой выключает.
Следующий наш класс будет отвечать за получение информации о пробках на дорогах GPSNotifier:

Осталось только обработать полученную информацию о ситуации на дорогах и проложить оптимальный маршрут, этим будет заниматься класс RoadAdvisor:

Настал волнующий момент посмотреть, как это все работает:

Вывод:
Power ON
Downloading road information…
Download complete!
Create a route
Power OFF

Работает неплохо, но как вы можете заметить водитель приходится слишком много взаимодействовать с навигационной системой, если мы ничего не предпримем конкуренты нас смогут обойти. В этом нам и поможет паттерн Фасад, в качестве фасада, у нас будет выступать класс GPSInterface, который будет за водителя выполнять однотипные действия:

В конструктор класса передаются все элементы, управление которыми мы хотим скрыть «за фасадом». Метод activate() будет выполнять всю рутинную работу за водителя – включать систему, загружать информацию о ситуации на дорогах и прокладывать оптимальный маршрут и это все по нажатию одной кнопки! Давайте проверим как работает наш новый класс:

Вывод:
Power ON
Downloading road information…
Download complete!
Create a route
Power OFF

Я надеюсь вы обратили внимание, что отключение навигационной системы в нашем примере осталось низменным:

Это одна из полезных особенностей данного паттерна – мы вольны работать с классами, которые скрыты интерфейсом (фасадом), напрямую, если в этом есть необходимость. И так, если вам необходимо упростить работу с каким-либо интерфейсом или изолировать клиента от сложной системы, то паттерн Фасад будет идеальным выбором.



Паттерн Фасад полный код примера:

Site Footer