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.