🚀 Capítulo 15: Facade (Tema: Batman)

NOTE

Este capítulo utiliza a temática de Batman para explicar o padrão Facade (Fachada). O Alfred e o Batman não querem lidar com a complexidade de ligar cada sistema da Batcaverna; eles querem apenas um botão central que faça tudo!


1. 🎯 Objetivo da Aula

Compreender o padrão de projeto Facade (Padrão Estrutural), entendendo como ele fornece uma interface simplificada (uma fachada) para um conjunto complexo de classes, biblioteca ou framework.

2. 🏢 O Cenário Prático (Seu Desafio)

A Batcaverna está cheia de tecnologia complexa:

  • Um sistema de sonar para mapear Gotham.
  • Um supercomputador para analisar DNA de criminosos.
  • O controle da porta secreta do Batmóvel.
  • O sistema de defesa com gás lacrimogêneo.

Quando o Batman chega com pressa no Batmóvel, ele não pode parar para digitar linhas de comando em 4 computadores diferentes. Ele precisa de um painel simples no carro com o botão: "Modo de Alerta". Ao apertar esse botão, o próprio painel se encarrega de:

  1. Ligar o supercomputador.
  2. Abrir a porta secreta.
  3. Colocar o sonar em modo de busca.

Esse painel simplificado é a Facade (Fachada). Seu desafio é criar essa casca simples para o Batman!

3. 🧠 Fundamentos: A Teoria Traduzida

O Facade (Fachada) é um padrão de projeto estrutural que fornece uma interface simplificada para uma biblioteca, um framework ou qualquer outro grupo complexo de classes.

🎭 Escondendo a Complexidade

Imagine que você quer fazer uma compra na internet. Você clica no botão “Comprar”. Por trás desse botão, o sistema:

  1. Verifica o estoque.
  2. Chama a operadora do cartão de crédito.
  3. Gera a nota fiscal.
  4. Avisa a transportadora.

Você não precisa saber como nada disso funciona. O botão “Comprar” é a fachada que esconde toda a bagunça do sistema!


4. 📖 Exemplo Guiado: O Painel da Batcaverna (JS)

// SISTEMAS COMPLEXOS
class SuperComputador { ligar() { console.log("Supercomputador analisando dados..."); } }
class PortaSecreta { abrir() { console.log("Porta do Batmóvel aberta!"); } }
class DefesaCaverna { ativar() { console.log("Gás de defesa pronto!"); } }
 
// A FACHADA (FACADE)
class BatPainel {
    constructor() {
        this.pc = new SuperComputador();
        this.porta = new PortaSecreta();
        this.defesa = new DefesaCaverna();
    }
 
    // Método simplificado
    modoDeAlerta() {
        console.log("--- ATIVANDO MODO DE ALERTA ---");
        this.porta.abrir();
        this.pc.ligar();
        this.defesa.ativar();
    }
}
 
// O Batman usa apenas a fachada
const painel = new BatPainel();
painel.modoDeAlerta(); // Um único comando faz tudo!

5. 🛠️ Prática Obrigatória 1: Usando a Fachada

Com base no exemplo acima, imagine que o Batman também quer um botão "Modo de Descanso".

  1. O que esse botão deveria fazer com o computador, a porta e a defesa?
  2. Escreva como ficaria esse método dentro da classe BatPainel.

6. 🛠️ Prática Obrigatória 2: Esconder ou Bloquear?

O padrão Facade impede que o programador acesse os sistemas complexos diretamente se ele quiser? Por exemplo, se o Alfred quiser usar apenas o Supercomputador para fazer uma pesquisa, ele ainda pode fazer const pc = new SuperComputador(); pc.ligar(); ou a Facade bloqueia isso?


7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 15 Paradigmas) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_10_paradigmas_e_padroes_de_projeto/
├── capitulos/
│   ├── capitulo_15_facade.md
│   └── codigos/
│       └── cap15/
│           └── bat_facade.js

9. 💡 Checkpoint de Lógica

A Facade não adiciona nenhuma funcionalidade nova ao sistema. Ela apenas simplifica o acesso ao que já existia.

10. 🔥 Desafio de Fixação

Pesquise como a biblioteca jQuery funcionava como uma grande Facade para simplificar a manipulação do DOM e as requisições AJAX no JavaScript antigo.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Deveria fechar a porta, desligar o computador e desativar a defesa.
  2. Método:
modoDeDescanso() {
    console.log("--- ATIVANDO MODO DE DESCANSO ---");
    // chama os métodos inversos de cada classe
}

Gabarito da Prática 2: Não bloqueia! A Facade apenas oferece um atalho para o caso mais comum. Se você precisar de acesso avançado a um dos sistemas específicos, você ainda pode acessá-lo diretamente.


Capitulo Anterior | Proximo Capitulo