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