Tópico 10 - Bridge

Tópico 10 - Bridge

Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Motivação

  • Alguns problemas variam em duas dimensões
  • Herança pura multiplica subclasses
  • O código cresce mais que o necessário
  • Precisamos separar responsabilidades
  • Bridge reduz combinações desnecessárias
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Problema

  • Notificação simples ou urgente
  • Envio por email, SMS ou push
  • Herança gera muitas combinações
  • Cada novo eixo multiplica classes
  • Manutenção vira custo alto
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Conceito principal

  • Bridge é um padrão estrutural
  • Ele separa duas hierarquias relacionadas
  • Uma hierarquia representa a abstração
  • A outra representa a implementação
  • Ambas evoluem de forma independente
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Como funciona

  • A abstração mantém uma referência
  • Essa referência aponta para a implementação
  • Parte do trabalho é delegada
  • O cliente usa a abstração principal
  • A implementação pode ser trocada depois
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Estrutura / Componentes

center

Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Papéis no padrão

  • Abstraction define alto nível
  • RefinedAbstraction especializa comportamentos
  • Implementor define operações básicas
  • ConcreteImplementor realiza detalhes concretos
  • O cliente combina os dois lados
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Exemplo conceitual

  • Sistema de avisos acadêmicos
  • Tipos: simples e urgente
  • Canais: email e push
  • Não queremos uma classe por combinação
  • Bridge conecta tipo e canal
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Código: implementação

interface CanalEnvio {
    void enviarMensagem(String titulo, String conteudo);
}

class EmailCanal implements CanalEnvio {
    public void enviarMensagem(String titulo, String conteudo) {
        System.out.println("Email: " + titulo);
    }
}
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Código: abstração

abstract class Notificacao {
    protected CanalEnvio canal;

    public Notificacao(CanalEnvio canal) {
        this.canal = canal;
    }

    public abstract void enviar(String titulo, String conteudo);
}
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Código: abstração refinada

class NotificacaoSimples extends Notificacao {
    public NotificacaoSimples(CanalEnvio canal) {
        super(canal);
    }

    public void enviar(String titulo, String conteudo) {
        canal.enviarMensagem(titulo, conteudo);
    }
}
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Analogia

  • Controle remoto e dispositivo
  • O controle nao precisa conhecer detalhes internos
  • A TV ou radio seguem contrato comum
  • Podemos trocar um lado sem quebrar o outro
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Quando usar

  • Ha duas dimensoes ortogonais
  • A hierarquia cresce por combinacoes
  • Implementacoes mudam com frequencia
  • Queremos trocar plataforma em runtime
  • Dominio e infraestrutura devem evoluir separados
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Quando nao usar

  • O problema tem uma so variacao real
  • A modelagem ficaria mais complexa
  • Nao ha necessidade de independencia
  • O codigo atual ainda e simples
  • Composicao adicional nao traz ganho real
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Vantagens

  • Evita explosao de subclasses
  • Diminui acoplamento entre eixos
  • Facilita extensao independente
  • Melhora modularidade
  • Permite trocar implementacoes facilmente
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Desvantagens

  • Aumenta numero de classes
  • Exige modelagem mais cuidadosa
  • Pode confundir iniciantes
  • Nao vale para casos triviais
  • Estrutura fica mais abstrata
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Relações com outros padrões

  • Adapter integra interfaces incompatíveis
  • Strategy troca algoritmos
  • Decorator adiciona comportamento
  • Abstract Factory pode criar implementações
  • Bridge separa eixos de evolução
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Exemplo prático

AvisoAcademico aviso = new AvisoUrgente(new PushNotificacao());
aviso.disparar();
  • AvisoUrgente varia o tipo
  • PushNotificacao varia o canal
  • A combinacao acontece por composicao
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Resumo final

  • Bridge separa abstração e implementação
  • Resolve explosão de subclasses
  • Usa composição em vez de herança excessiva
  • Funciona bem com duas dimensões independentes
  • Ajuda a manter o sistema flexível
Design Patterns - Professor Ramon Venson - SATC 2026.1
Tópico 10 - Bridge

Referência

Design Patterns - Professor Ramon Venson - SATC 2026.1