🚀 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:
- Abstração: É a casca (Ex: A cor do Portal). Ela contém uma referência para a implementação.
- 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.
- 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?
- 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)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 12 Paradigmas) e clique em Commit to main. - 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.js9. 💡 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:
- Sem Bridge: Precisaríamos criar classes para todas as novas combinações (PortalVerdeTeletransporte, PortalVerdeImpulso, PortalVerdeGravidade, PortalAzulGravidade, PortalLaranjaGravidade).
- Com Bridge: Apenas 2 classes (A classe do
PortalVerdee a classe doEfeitoGravidade). Elas se combinam sozinhas!