Sobes.tech
Middle

Какво е фасада (Facade)?

sobes.tech AI

Отговор от 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);

// За клиента взаимодействието е значително по-опростено