Sobes.tech
Middle

Co je to fasáda (Facade)?

sobes.tech AI

Odpověď od AI

Fasáda je strukturální návrhový vzor, který poskytuje sjednocené rozhraní pro sadu rozhraní v podsystému. Definuje rozhraní vysoké úrovně, které zjednodušuje použití podsystému, aniž by se zabýval jeho vnitřní strukturou.

Hlavní cíle fasády:

  • Zjednodušení: Skrývá složitost podsystému za jednoduchým rozhraním.
  • Snížení závislosti: Klientský kód komunikuje pouze s fasádou, nikoli přímo s komponenty podsystému.
  • Zapouzdření: Změny v interní struktuře podsystému mají menší dopad na klientský kód, který používá fasádu.

Příklad použití: Představte si složitý systém zpracování objednávek v internetovém obchodě, který zahrnuje subsystémy inventáře, plateb, doručení a oznámení. Místo toho, aby klient volal metody každého z těchto subsystémů samostatně, může být vytvořena fasáda OrderProcessor.

// Příklad struktury bez fasády
// Klientský kód je složitý
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);

// Příklad struktury s fasádou
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) {
        // Kontrola skladu
        inventorySystem.checkStock(item);

        // Zpracování platby
        paymentSystem.processPayment(amount);

        // Organizace doručení
        shippingSystem.arrangeShipping(address);

        // Odeslání potvrzení
        notificationSystem.sendConfirmation(email);

        // Další logika nebo zpracování chyb
    }
}

// Klientský kód s použitím fasády
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);

// Pro klienta je interakce výrazně zjednodušena