Паттерн Facade (фасад)
В этой теме мы разберем:
- суть паттерна;
- структуру его работы;
- применимость и шаги реализации паттерна;
- его отношения с другими паттернами.
Суть паттерна
Фасад — это структурный паттерн проектирования, который предоставляет простой интерфейс для сложной системы классов, библиотеки или фреймворка.
Проблема
Нашему коду приходится работать с большим количеством объектов некой сложной библиотеки или фреймворка. Мы должны самостоятельно инициализировать эти объекты, следить за правильным порядком зависимостей и так далее.
В результате бизнес-логика наших классов тесно переплетается с деталями реализации сторонних классов. Такой код довольно сложно понимать и поддерживать.
Решение
Фасад — это простой интерфейс для работы со сложной подсистемой, содержащей множество классов. У фасада может быть урезанный интерфейс, не имеющий 100%-й функциональности, которой можно достичь, используя сложную подсистему напрямую. Но он предоставляет именно те фичи, которые нужны клиенту, и скрывает все остальные.
Фасад полезен, если ты используешь какую-то сложную библиотеку со множеством подвижных частей, от которой тебе нужна только часть возможностей.
К примеру, программа, заливающая видео котиков в социальные сети, может использовать профессиональную библиотеку сжатия видео. Но все, что нужно клиентскому коду этой программы, — это простой метод encode(filename, format). Создав класс с таким методом, ты реализуешь свой первый фасад.
Аналогия из жизни
Пример телефонного заказа
Когда ты звонишь в магазин и делаешь заказ по телефону, сотрудник службы поддержки является твоим фасадом по отношению ко всем службам и отделам магазина. Он предоставляет тебе упрощённый интерфейс системы создания заказа, платёжной системы и отдела доставки.