Facade

Материал из Циклопедии
Перейти к навигации Перейти к поиску

Facade (façade, фасад) — структурный паттерн проектирования. Предоставляет унифицированный интерфейс вместо набора интерфейсов некоторой подсистемы. Facade определяет интерфейс более высокого уровня, упрощающий использование подсистемы. При этом фасад не ограничивает доступ к исходным интерфейсам и не добавляет новой функциональности.

Используя паттерн фасад, можно определить понятный для тестирования и использования API библиотеки, а также предоставить единое API для работы с набором различных API. Также паттерн фасад позволяет уменьшить зависимости между подсистемами, так как взаимодействие будет осуществляться не через большое количество компонентов, а через единый фасад. В частности, с помощью фасадов можно определить точки входа на каждый слой многослойного приложения. Изменения в интерфейсах подсистем потребует внесения изменений только в фасад, а не в каждый из компонентов системы.

Для реализации паттерна достаточно определить контракт и реализовать объявленные методы, в которых осуществляется делегирование запросов соответствующим подсистемам. В компонентах подсистемы ссылка на фасад не устанавливается.

Примерами фасадов в Java являются классы facesContext и ExternalContext фреймворка JavaServer Faces. Фасады широко используются во фреймворке hybris, в частности, для доступа к сущностям, взаимодействующим с тем или иным компонентом акселератора, предоставляются соответствующие фасады, например CheckoutFacade, OrderFacade, CartFacade. Сервер Apache Tomcat предоставляет такие реализации паттерна, как RequestFacade, ResponseFacade, ServletContextFacade и других.