Middle
Ce este o fațadă (Facade)?
sobes.tech AI
Răspuns de la AI
Fațada este un pattern de proiectare structural care oferă o interfață unificată pentru un set de interfețe dintr-un subsistem. Ea definește o interfață de nivel înalt care simplifică utilizarea subsistemului, fără a intra în structura sa internă.
Obiectivele principale ale fațadei:
- Simplificare: Ascunde complexitatea subsistemului în spatele unei interfețe simple.
- Reducerea cuplajului: Codul client interacționează doar cu fațada, nu direct cu componentele subsistemului.
- Încapsulare: Modificările în structura internă a subsistemului au un impact mai mic asupra codului client care utilizează fațada.
Exemplu de utilizare:
Imaginați-vă un sistem complex de procesare a comenzilor într-un magazin online, care include subsisteme de inventar, plăți, livrare și notificări. În loc ca clientul să apeleze metodele fiecărui subsistem separat, se poate crea o OrderProcessor ca fațadă.
// Structură fără fațadă
// Codul client devine complex
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);
// Structură cu fațadă
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) {
// Verificare stoc
inventorySystem.checkStock(item);
// Procesare plată
paymentSystem.processPayment(amount);
// Organizare livrare
shippingSystem.arrangeShipping(address);
// Trimitere notificare
notificationSystem.sendConfirmation(email);
// Logica suplimentară sau gestionarea erorilor
}
}
// Cod client cu utilizarea fațadei
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);
// Pentru client, interacțiunea devine semnificativ mai simplă