🚀 Capítulo 12: Bridge (Tema: Portal)

NOTE

Este capítulo utiliza a temática de Portal para explicar o padrão Bridge. Separar a cor do portal do efeito que ele causa evita que precisemos criar infinitas combinações de classes!


1. 🎯 Objetivo da Aula

Compreender o padrão de projeto Bridge (Padrão Estrutural), entendendo como ele desacopla uma abstração de sua implementação para que as duas possam variar independentemente.

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

No jogo Portal, a Aperture Science está desenvolvendo novos tipos de portais.

  • Abstrações (As Cores): Temos o Portal Azul e o Portal Laranja.
  • Implementações (Os Efeitos): Temos o efeito de Teletransporte e o efeito de Impulso de Velocidade.

Se tentarmos criar classes para todas as combinações, teremos: PortalAzulTeletransporte, PortalAzulImpulso, PortalLaranjaTeletransporte, PortalLaranjaImpulso… Se adicionarmos mais uma cor e mais um efeito, o número de classes explode! O padrão Bridge serve como uma “ponte” que separa a Cor do Efeito. Você pode criar qualquer portal e plugar qualquer efeito nele em tempo de execução! Seu desafio é entender como fazer essa ponte!

3. 🧠 Fundamentos: A Teoria Traduzida

O Bridge (Ponte) é um padrão de projeto estrutural que permite dividir uma classe grande ou um conjunto de classes intimamente ligadas em duas hierarquias separadas — abstração e implementação — que podem ser desenvolvidas independentemente.

🌉 A Estrutura:

  1. Abstração: É a casca (Ex: A cor do Portal). Ela contém uma referência para a implementação.
  2. Implementação: É o motor (Ex: O que o portal faz).

Em vez de herança (PortalAzul herda de Portal), usamos Composição (Portal tem um Efeito).


4. 📖 Exemplo Guiado: Criando a Ponte (JS)

// IMPLEMENTAÇÕES (Os Motores)
class EfeitoTeletransporte {
    aplicar() { console.log("Teletransportando para outra sala..."); }
}
class EfeitoImpulso {
    aplicar() { console.log("Ganhando muita velocidade!"); }
}
 
// ABSTRAÇÃO (A Casca)
class Portal {
    constructor(cor, efeito) {
        this.cor = cor;
        this.efeito = efeito; // A PONTE
    }
    atravessar() {
        console.log(`Atravessando o portal ${this.cor}...`);
        this.efeito.aplicar();
    }
}
 
// USO
const efeito1 = new EfeitoTeletransporte();
const efeito2 = new EfeitoImpulso();
 
const portalAzul = new Portal("Azul", efeito1);
const portalLaranja = new Portal("Laranja", efeito2);
 
portalAzul.atravessar();
portalLaranja.atravessar();

5. 🛠️ Prática Obrigatória 1: Evitando a Explosão

Imagine que agora a Aperture Science criou o Portal Verde e o efeito de Inversão de Gravidade.

  1. Sem o padrão Bridge, quantas classes novas de combinações precisaríamos criar para cobrir todas as possibilidades com as cores e efeitos antigos e novos?
  2. Com o padrão Bridge, quantas classes novas precisamos criar?

6. 🛠️ Prática Obrigatória 2: Mudando em Tempo de Execução

No padrão Bridge, como usamos composição, podemos mudar o efeito do portal depois que ele foi criado? (Ex: O portal azul começa como teletransporte e depois vira impulso). Como faríamos isso no código?


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

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 12 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_12_bridge.md
│   └── codigos/
│       └── cap12/
│           └── portal_bridge.js

9. 💡 Checkpoint de Lógica

O padrão Bridge é muito parecido com o padrão Strategy (que veremos adiante). A diferença principal é a intenção: o Bridge foca em estruturar classes para evitar explosão de subclasses, enquanto o Strategy foca em mudar algoritmos em tempo de execução.

10. 🔥 Desafio de Fixação

Pesquise como o padrão Bridge é usado em drivers de banco de dados (onde a Abstração é o seu código pedindo para salvar um dado, e a Implementação é o driver específico do MySQL ou Oracle).

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Sem Bridge: Precisaríamos criar classes para todas as novas combinações (PortalVerdeTeletransporte, PortalVerdeImpulso, PortalVerdeGravidade, PortalAzulGravidade, PortalLaranjaGravidade).
  2. Com Bridge: Apenas 2 classes (A classe do PortalVerde e a classe do EfeitoGravidade). Elas se combinam sozinhas!

Capitulo Anterior | Proximo Capitulo