Sobes.tech
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.