Sobes.tech
Middle

Čo je fasáda (Facade)?

sobes.tech AI

Odpoveď od AI

Fasáda je štrukturálny vzor návrhu, ktorý poskytuje zjednotený rozhranie k súboru rozhraní v podsystéme. Definuje vysokú úroveň rozhrania, ktoré zjednodušuje používanie podsystému, nezapájajúc sa do jeho vnútornej štruktúry.

Hlavné ciele fasády:

  • Zjednodušenie: Skrýva zložitosť podsystému za jednoduchým rozhraním.
  • Zníženie prepojenosti: Klientska kód komunikuje iba s fasádou, nie priamo s komponentmi podsystému.
  • Inkapsulácia: Zmeny vo vnútornej štruktúre podsystému majú menší vplyv na klientski kód používajúci fasádu.

Príklad použitia: Predstavme si zložitý systém spracovania objednávok v internetovom obchode, ktorý zahŕňa podsystémy inventára, platieb, doručenia a oznámení. Namiesto toho, aby klient volal metódy každého z týchto podsystémov samostatne, môžeme vytvoriť fasádu OrderProcessor.

// Príklad štruktúry bez fasády
// Klientska kód sa stáva zložitým
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);

// Príklad štruktúry 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 zásob
        inventorySystem.checkStock(item);

        // Spracovanie platby
        paymentSystem.processPayment(amount);

        // Organizácia doručenia
        shippingSystem.arrangeShipping(address);

        // Odoslanie oznámenia
        notificationSystem.sendConfirmation(email);

        // Ďalšia logika alebo spracovanie chýb
    }
}

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

// Pre klienta je interakcia značne zjednodušená

Fasáda nepridáva novú funkcionalitu, iba deleguje volania príslušným objektom podsystému, poskytujúc pohodlný bod vstupu.