Sobes.tech
Middle

O que é uma fachada (Facade)?

sobes.tech IA

Resposta da IA

A fachada é um padrão de design estrutural que fornece uma interface unificada a um conjunto de interfaces em um subsistema. Ela define uma interface de alto nível que simplifica o uso do subsistema, sem entrar na sua estrutura interna.

Os principais objetivos da fachada:

  • Simplificação: Esconde a complexidade do subsistema por trás de uma interface simples.
  • Redução de acoplamento: O código cliente interage apenas com a fachada, não diretamente com os componentes do subsistema.
  • Encapsulamento: Mudanças na estrutura interna do subsistema têm menos impacto no código cliente que usa a fachada.

Exemplo de uso: Imagine um sistema complexo de processamento de pedidos numa loja online, que inclui subsistemas de inventário, pagamentos, envio e notificações. Em vez de o cliente chamar os métodos de cada um desses subsistemas separadamente, pode-se criar um OrderProcessor como fachada.

// Exemplo de estrutura sem fachada
// O código cliente torna-se complexo
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);

// Exemplo de estrutura com fachada
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) {
        // Verificação de stock
        inventorySystem.checkStock(item);

        // Processamento do pagamento
        paymentSystem.processPayment(amount);

        // Organização do envio
        shippingSystem.arrangeShipping(address);

        // Envio de notificação
        notificationSystem.sendConfirmation(email);

        // Lógica adicional ou tratamento de erros
    }
}

// Código cliente usando a fachada
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);

// Para o cliente, a interação é significativamente simplificada