Middle
Wat is een gevel (Facade)?
sobes.tech AI
Antwoord van AI
De gevel is een structureel ontwerppatroon dat een uniforme interface biedt voor een reeks interfaces in een subsysteem. Het definieert een high-level interface die het gebruik van het subsysteem vereenvoudigt, zonder in de interne structuur te duiken.
De belangrijkste doelen van de gevel:
- Vereenvoudiging: Verbergt de complexiteit van het subsysteem achter een eenvoudige interface.
- Vermindering van koppeling: De clientcode communiceert alleen met de gevel, niet direct met de componenten van het subsysteem.
- Encapsulatie: Wijzigingen in de interne structuur van het subsysteem hebben minder invloed op de clientcode die de gevel gebruikt.
Voorbeeld van gebruik:
Stel je een complex orderverwerkingssysteem voor in een online winkel, inclusief subsystemen voor inventaris, betalingen, verzending en meldingen. In plaats van dat de klant de methoden van elk van deze subsystemen afzonderlijk aanroept, kan een OrderProcessor als gevel worden gemaakt.
// Structuur zonder gevel
// De clientcode wordt complex
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);
// Structuur met gevel
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) {
// Controleer voorraad
inventorySystem.checkStock(item);
// Verwerk betaling
paymentSystem.processPayment(amount);
// Regelen verzending
shippingSystem.arrangeShipping(address);
// Verstuur bevestiging
notificationSystem.sendConfirmation(email);
// Extra logica of foutafhandeling
}
}
// Clientcode met gebruik van de gevel
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);
// Voor de klant wordt de interactie aanzienlijk vereenvoudigd