Middle
Какво е фасада (Facade)?
sobes.tech AI
Отговор от AI
Фасадът е структурен шаблон за дизайн, който предоставя унифициран интерфейс към набор от интерфейси в подсистема. Той дефинира интерфейс от висок ниво, който опростява използването на подсистемата, без да навлиза в нейната вътрешна структура.
Основните цели на фасада:
- Улесняване: Скрива сложността на подсистемата зад прост интерфейс.
- Намаляване на свързаността: Клиентският код взаимодейства само с фасадата, а не директно с компонентите на подсистемата.
- Капсулиране: Промените във вътрешната структура на подсистемата имат по-малко влияние върху клиентския код, използващ фасадата.
Пример за използване:
Представете си сложна система за обработка на поръчки в онлайн магазин, включваща подсистеми за инвентар, плащания, доставка и известия. Вместо клиентът да извиква методите на всяка от тези подсистеми отделно, може да се създаде фасада OrderProcessor.
// Структура без фасада
// Клиентският код става сложен
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);
// Структура с фасада
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) {
// Проверка наличия
inventorySystem.checkStock(item);
// Обработка платежа
paymentSystem.processPayment(amount);
// Организация доставки
shippingSystem.arrangeShipping(address);
// Отправка уведомления
notificationSystem.sendConfirmation(email);
// Дополнительная логика или обработка ошибок
}
}
// Клиентски код с използване на фасадата
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);
// За клиента взаимодействието е значително по-опростено