Sobes.tech
Middle

Czym jest fasada (Facade)?

sobes.tech AI

Odpowiedź od AI

Fasada jest wzorcem projektowym strukturalnym, który zapewnia zunifikowany interfejs do zestawu interfejsów w podsystemie. Definiuje on interfejs wysokiego poziomu, który upraszcza korzystanie z podsystemu, nie zagłębiając się w jego wewnętrzną strukturę.

Główne cele fasady:

  • Uproszczenie: Ukrywa złożoność podsystemu za pomocą prostego interfejsu.
  • Zmniejszenie powiązań: Kod klienta komunikuje się tylko z fasadą, a nie bezpośrednio z komponentami podsystemu.
  • Enkapsulacja: Zmiany w wewnętrznej strukturze podsystemu mają mniejszy wpływ na kod klienta korzystającego z fasady.

Przykład użycia: Wyobraźmy sobie skomplikowany system obsługi zamówień w sklepie internetowym, obejmujący podsystemy inwentarza, płatności, wysyłki i powiadomień. Zamiast wywoływać metody każdego z tych podsystemów osobno, można utworzyć fasadę OrderProcessor.

// Przykład struktury bez fasady
// Kod klienta staje się skomplikowany
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);

// Przykład struktury z fasadą
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) {
        // Sprawdzenie dostępności
        inventorySystem.checkStock(item);

        // Przetwarzanie płatności
        paymentSystem.processPayment(amount);

        // Organizacja wysyłki
        shippingSystem.arrangeShipping(address);

        // Wysyłka powiadomienia
        notificationSystem.sendConfirmation(email);

        // Dodatkowa logika lub obsługa błędów
    }
}

// Kod klienta korzystający z fasady
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);

// Dla klienta interakcja jest znacznie uproszczona