Middle
92
questionbank
Что такое фасад (Facade)?
Ответ от нейросети
sobes.tech AI
Фасад — это структурный шаблон проектирования, который предоставляет унифицированный интерфейс к набору интерфейсов в подсистеме. Он определяет высокоуровневый интерфейс, упрощающий использование подсистемы, не вникая в ее внутреннюю структуру.
Основные цели фасада:
- Упрощение: Скрывает сложность подсистемы за простым интерфейсом.
- Снижение связанности: Клиентский код взаимодействует только с фасадом, а не напрямую с компонентами подсистемы.
- Инкапсуляция: Изменения во внутренней структуре подсистемы меньше влияют на клиентский код, использующий фасад.
Пример использования:
Представим сложную систему обработки заказа в интернет-магазине, включающую подсистемы инвентаризации, платежей, доставки и уведомлений. Вместо того, чтобы клиенту вызывать методы каждой из этих подсистем по отдельности, можно создать фасад OrderProcessor.
// Пример структуры без фасада
// Клиентский код становится сложным
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);
// Пример структуры с фасадом
public class OrderProcessorFacade {
private InventorySystem inventorySystem;
private PaymentSystem paymentSystem;
private ShippingSystem shippingSystem;
private NotificationSystem notificationSystem;
public OrderProcessorFacade() {
this.inventorySystem = new InventorySystem();
this.paymentSystem = new PaymentSystem();
this.shippingSystem = new ShippingSystem();
this.notificationSystem = new NotificationSystem();
}
public void placeOrder(Item item, double amount, String address, String email) {
// Проверка наличия
inventorySystem.checkStock(item);
// Обработка платежа
paymentSystem.processPayment(amount);
// Организация доставки
shippingSystem.arrangeShipping(address);
// Отправка уведомления
notificationSystem.sendConfirmation(email);
// Дополнительная логика или обработка ошибок
}
}
// Клиентский код с использованием фасада
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);
// Для клиента взаимодействие существенно упрощается
Фасад не добавляет новую функциональность, он лишь делегирует вызовы соответствующим объектам подсистемы, предоставляя удобную точку входа.