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ą.