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