Sobes.tech
Middle

Kas yra fasadas (Facade)?

sobes.tech AI

Atsakymas iš AI

Fasadas — tai struktūrinis dizaino šablonas, kuris suteikia vieningą sąsają prie rinkinio sąsajų subsistemoje. Jis apibrėžia aukšto lygio sąsają, palengvinančią subsistemos naudojimą, nesigilinant į jos vidinę struktūrą.

Pagrindiniai fasado tikslai:

  • Supaprastinimas: Slėpia sudėtingumą už paprastos sąsajos.
  • Mažina priklausomybę: Kliento kodas bendrauja tik su fasadu, o ne tiesiogiai su subsistemos komponentais.
  • Inkapuliacija: Pakeitimai subsistemos vidinėje struktūroje mažiau veikia klientų kodą, naudojantį fasadą.

Pavyzdys: Įsivaizduokime sudėtingą užsakymo apdorojimo sistemą internetinėje parduotuvėje, apimančią inventoriaus, apmokėjimo, pristatymo ir pranešimų subsistemas. Vietoje to, kad klientas kviečia kiekvieno iš šių subsistemų metodus atskirai, galima sukurti OrderProcessor fasadą.

// Be fasado struktūros pavyzdys
// Kliento kodas tampa sudėtingas
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);

// Su fasadu struktūros pavyzdys
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) {
        // Patikrinimas
        inventorySystem.checkStock(item);

        // Mokėjimo apdorojimas
        paymentSystem.processPayment(amount);

        // Pristatymo organizavimas
        shippingSystem.arrangeShipping(address);

        // Pranešimo siuntimas
        notificationSystem.sendConfirmation(email);

        // Papildoma logika arba klaidų apdorojimas
    }
}

// Kliento kodas naudojant fasadą
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);

// Klientui sąveika žymiai supaprastėja

Fasadas nesudaro naujos funkcionalumo, jis tik deleguoja iškvietimus atitinkamiems subsistemos objektams, suteikdamas patogų įėjimo tašką.