Skip to content

Паттерн Facade (фасад)

В этой теме мы разберем:

  • суть паттерна;
  • структуру его работы;
  • применимость и шаги реализации паттерна;
  • его отношения с другими паттернами.

Суть паттерна

Фасад — это структурный паттерн проектирования, который предоставляет простой интерфейс для сложной системы классов, библиотеки или фреймворка.

Проблема

Нашему коду приходится работать с большим количеством объектов некой сложной библиотеки или фреймворка. Мы должны самостоятельно инициализировать эти объекты, следить за правильным порядком зависимостей и так далее.

В результате бизнес-логика наших классов тесно переплетается с деталями реализации сторонних классов. Такой код довольно сложно понимать и поддерживать.

Решение

Фасад — это простой интерфейс для работы со сложной подсистемой, содержащей множество классов. У фасада может быть урезанный интерфейс, не имеющий 100%-й функциональности, которой можно достичь, используя сложную подсистему напрямую. Но он предоставляет именно те фичи, которые нужны клиенту, и скрывает все остальные.

Фасад полезен, если ты используешь какую-то сложную библиотеку со множеством подвижных частей, от которой тебе нужна только часть возможностей.

К примеру, программа, заливающая видео котиков в социальные сети, может использовать профессиональную библиотеку сжатия видео. Но все, что нужно клиентскому коду этой программы, — это простой метод encode(filename, format). Создав класс с таким методом, ты реализуешь свой первый фасад.

Аналогия из жизни

Пример телефонного заказа

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