Middle
Šta je fasada (Facade)?
sobes.tech АИ
Одговор од АИ
Fasada — to strukturalni obrazac dizajna koji pruža ujedinjeni interfejs za skup interfejsa u podsistemu. Ona definiše visok nivo interfejsa koji pojednostavljuje korišćenje podsistema, ne ulazeći u njegovu unutrašnju strukturu.
Glavni ciljevi fasade:
- Pojednostavljenje: Skriva složenost podsistema iza jednostavnog interfejsa.
- Smanjenje povezanosti: Klijentski kod komunicira samo sa fasadom, a ne direktno sa komponentama podsistema.
- Enkapsulacija: Promene u unutrašnjoj strukturi podsistema manje utiču na klijentski kod koji koristi fasadu.
Primer upotrebe:
Zamislimo složen sistem obrade porudžbina u internet prodavnici, koji uključuje podsisteme inventara, plaćanja, isporuke i obaveštenja. Umesto da klijent poziva metode svakog od ovih podsistema pojedinačno, može se kreirati fasada OrderProcessor.
// Primer strukture bez fasade
// Klijentski kod postaje složen
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);
// Primer strukture sa fasadom
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) {
// Provera zaliha
inventorySystem.checkStock(item);
// Obrada plaćanja
paymentSystem.processPayment(amount);
// Organizacija isporuke
shippingSystem.arrangeShipping(address);
// Slanje obaveštenja
notificationSystem.sendConfirmation(email);
// Dodatna logika ili obrada grešaka
}
}
// Klijentski kod koristeći fasadu
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);
// Za klijenta interakcija je znatno pojednostavljena
Fasada ne dodaje novu funkcionalnost, već samo delegira pozive odgovarajućim objektima podsistema, pružajući zgodnu tačku ulaska.