Lista de Exercícios 008: Bridge
Exercício 1: Reflexão
Seção intitulada “Exercício 1: Reflexão”Considere um sistema de notificações que varia em duas dimensões independentes:
- tipo de notificação: simples e urgente
- canal de envio: e-mail, SMS e push
Explique:
- Por que o padrão Bridge é apropriado para esse cenário.
- Qual seria o problema de modelar tudo apenas com herança.
- Como a separação entre abstração e implementação ajuda na manutenção do sistema.
Exercício 2: Código com má implementação
Seção intitulada “Exercício 2: Código com má implementação”O código abaixo tenta resolver o problema com herança, mas gera uma estrutura pouco escalável. Refatore conceitualmente para usar Bridge.
Código inicial (ruim)
Seção intitulada “Código inicial (ruim)”abstract class Notificacao {}
class NotificacaoSimplesEmail extends Notificacao { void enviar() { System.out.println("Simples por email"); }}
class NotificacaoSimplesSms extends Notificacao { void enviar() { System.out.println("Simples por SMS"); }}
class NotificacaoUrgenteEmail extends Notificacao { void enviar() { System.out.println("Urgente por email"); }}
class NotificacaoUrgenteSms extends Notificacao { void enviar() { System.out.println("Urgente por SMS"); }}O que sua refatoração deve alcançar
Seção intitulada “O que sua refatoração deve alcançar”- Criar uma abstração
Notificacao. - Criar uma interface de implementação
CanalEnvio. - Permitir que novos tipos de notificação e novos canais sejam adicionados separadamente.
Exercício 3: Implementação
Seção intitulada “Exercício 3: Implementação”Implemente o padrão Bridge para um sistema de relatórios acadêmicos com duas dimensões:
- tipo de relatório:
RelatorioResumoeRelatorioDetalhado - formato de saída:
PdfExportadoreHtmlExportador
Requisitos
Seção intitulada “Requisitos”- Crie a interface
Exportadorcom um métodoexportar(String conteudo). - Implemente
PdfExportadoreHtmlExportador. - Crie uma abstração
Relatorioque receba umExportadorno construtor. - Crie pelo menos duas abstrações refinadas:
RelatorioResumoeRelatorioDetalhado. - Demonstre o uso com um
main.
Exercício 4: Identificação do padrão
Seção intitulada “Exercício 4: Identificação do padrão”Para cada situação abaixo, diga se Bridge é ou não uma boa escolha e justifique:
- Um sistema precisa combinar tipos de controle remoto com vários dispositivos.
- Uma aplicação quer adaptar uma API legada para o contrato atual.
- Um software possui duas dimensões independentes: tela administrativa/comum e plataforma Windows/Linux.
- Um módulo quer apenas trocar um algoritmo de cálculo mantendo a mesma estrutura principal.