Паттерн "Фасад" в Java — один метод над подсистемой
Обзор — в структурных паттернах. Здесь — Facade на Java: простой вход в сложную подсистему из нескольких сервисов.
Задача паттерна
Facade даёт один высокоуровневый API поверх набора классов. Клиент не вызывает десять сервисов по отдельности — он вызывает placeOrder(). Аналогия — пульт от телевизора вместо пайки к плате.
Фасад не добавляет новой бизнес-логики — он координирует существующие компоненты.
Пример — оформление заказа
import java.math.BigDecimal;
class InventoryService {
boolean checkStock(String productId) {
return true;
}
}
class PaymentService {
boolean charge(String userId, BigDecimal amount) {
return true;
}
}
class ShippingService {
String createShipment(String orderId, String address) {
return "TRACK-" + orderId;
}
}
class NotificationService {
void sendOrderConfirmation(String userId, String trackingId) {
System.out.println("Уведомление отправлено: " + trackingId);
}
}
class OrderFacade {
private final InventoryService inventory = new InventoryService();
private final PaymentService payment = new PaymentService();
private final ShippingService shipping = new ShippingService();
private final NotificationService notification = new NotificationService();
String placeOrder(String userId, String productId,
BigDecimal amount, String address) {
if (!inventory.checkStock(productId)) {
throw new IllegalStateException("Нет на складе");
}
if (!payment.charge(userId, amount)) {
throw new IllegalStateException("Оплата не прошла");
}
String trackingId = shipping.createShipment(productId, address);
notification.sendOrderConfirmation(userId, trackingId);
return trackingId;
}
}
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.
См. также
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Паттерн — это повторяющийся шаблон, узор или схема. Паттерны встречаются повсюду — в природе, архитектуре, поведении людей и, конечно, в программировании. Порождающие паттерны проектирования — это группа шаблонов, направленных на решение задач, связанных с созданием объектов. Структурные паттерны — это группа шаблонов проектирования, решающих задачи организации классов и объектов таким образом, чтобы обеспечить гибкую архитектуру программного обеспечения. Поведенческие паттерны — это группа шаблонов проектирования, которые определяют способы взаимодействия объектов и распределения ответственности между ними. Архитектурные паттерны — это проверенные решения для организации структуры программного обеспечения. Интеграция систем — одна из центральных задач в современной разработке программного обеспечения. Паттерны доменного моделирования представляют собой проверенные решения для организации бизнес-логики в программных системах. Паттерн Strategy в C# — классическая реализация через интерфейс, замена на Func и Action, DI и критерии выбора без лишних абстракций. Паттерн Iterator в C# — ручной IEnumerator, генерация итератора компилятором через yield return, ленивость, LINQ и случаи, когда класс писать всё же нужно. Abstract Factory в C# и .NET — классическая схема через интерфейсы, замена через DI-контейнер, фабричный делегат и keyed services в .NET 8. Паттерн Command в C# — классическая схема, делегаты, MediatR, очередь задач, undo и критерии выбора между объектом команды и простым вызовом сервиса. Паттерн Observer в C# — event и делегаты, IObservable IObserver, слабая связанность, отписка и как не поймать утечки памяти в долгоживущих сервисах.Обзор паттернов проектирования
Порождающие паттерны
Структурные паттерны
Поведенческие паттерны
Архитектурные паттерны
Паттерны интеграции внешних систем
Паттерны проектирования доменных моделей
Стратегия в C#
Итератор в C#
Фабрика в C#
Команда в C#
Наблюдатель в C#