Паттерн "Фасад" в Java — один метод над подсистемой
Модель и масштаб — Основы БД, опорные темы, проектирование БД, пакетная работа. Карта — о разделе.
Обзор — в структурных паттернах. Здесь — Facade на Java: простой вход в сложную подсистему из нескольких сервисов.
Play ITЗагрузка интерактивного демо…
Задача паттерна
Facade даёт один высокоуровневый API поверх набора классов. Клиент не вызывает десять сервисов по отдельности — он вызывает placeOrder(). Аналогия — пульт от телевизора вместо пайки к плате.
Фасад не добавляет новой бизнес-логики — он координирует существующие компоненты.
Пример — оформление заказа
Код ITЗагрузка примера кода…
OrderFacade facade = new OrderFacade();
String tracking = facade.placeOrder(
"user1", "SKU-100", new BigDecimal("2999.00"), "Москва, ул. Пушкина");
Facade в Spring-приложениях
Типичный сервисный слой (OrderService в Spring Boot REST) — фасад над репозиториями, интеграциями и доменными правилами. Контроллер остаётся тонким; сложность спрятана за одним методом createOrder().
| Facade | Adapter |
|---|---|
| Упрощает свою подсистему для клиента | Переводит чужой интерфейс в нужный контракт |
| Один новый класс поверх многих | Один класс-переходник к legacy API |
Когда применять и риски
Уместен, когда подсистема сложная, а клиенту нужен один сценарий "сделай заказ / импортируй файл / синхронизируй справочник".
Риск — фасад раздувается до God Object с тысячей строк. Дробите на use-case-классы (PlaceOrderFacade, CancelOrderFacade) или пакеты по bounded context.
В Spring границу транзакции часто вешают на метод фасада/сервиса (@Transactional), чтобы все вызовы подсистем прошли в одном unit of work.
См. также
- Структурные паттерны — Фасад
- Proxy в Java
- Spring Boot приложение
- фасад над внешним API — 2.09, интеграционные потоки