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