Sobes.tech
Middle

Mi az a homlokzat (Facade)?

sobes.tech MI

Válasz az MI-től

A homlokzat egy strukturális tervezési minta, amely egységes felületet biztosít egy alrendszerben lévő interfészek halmazához. Egy magas szintű felületet határoz meg, amely megkönnyíti az alrendszer használatát anélkül, hogy belemélyedne annak belső szerkezetébe.

A homlokzat fő céljai:

  • Egyszerűsítés: Elrejti az alrendszer összetettségét egy egyszerű felület mögött.
  • Csökkenti a kötöttséget: A klienskód csak a homlokzattal kommunikál, nem közvetlenül az alrendszer komponenseivel.
  • Encapsuláció: Az alrendszer belső szerkezetében bekövetkező változások kevésbé befolyásolják a homlokzatot használó klienskódot.

Használati példa: Képzelj el egy összetett rendelésfeldolgozó rendszert egy online boltban, amely magában foglalja a készletkezelést, fizetéseket, szállítást és értesítéseket. Ahelyett, hogy a kliens minden egyes alrendszer metódusát külön hívná, létrehozhat egy OrderProcessor nevű homlokzatot.

// Homlokzat nélküli struktúra példa
// A klienskód bonyolult lesz
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);

// Homlokzattal ellátott struktúra példa
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) {
        // Készlet ellenőrzése
        inventorySystem.checkStock(item);

        // Fizetés feldolgozása
        paymentSystem.processPayment(amount);

        // Szállítás szervezése
        shippingSystem.arrangeShipping(address);

        // Értesítés küldése
        notificationSystem.sendConfirmation(email);

        // További logika vagy hibakezelés
    }
}

// Klienskód a homlokzat használatával
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);

// A kliens számára az interakció jelentősen egyszerűsödik