Sobes.tech
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);

// Для клиента взаимодействие существенно упрощается

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