Pular para o conteúdo

Lista de Exercícios 017: Mediator

Analise cada situação e diga se o padrão Mediator é ou não uma boa escolha. Em cada caso, classifique como adequada ou não adequada e justifique brevemente.

  1. Situação 1: uma tela de cadastro possui vários campos, checkbox e botões que alteram o comportamento uns dos outros conforme o usuário interage.
  2. Situação 2: uma classe Calculadora soma dois números e não interage com outros objetos do sistema.
  3. Situação 3: um chat corporativo precisa centralizar o envio de mensagens entre usuários sem que cada participante conheça todos os demais diretamente.
  4. Situação 4: um formulário pequeno tem apenas um botão que chama diretamente um único serviço, sem lógica adicional de coordenação.
  5. Situação 5: um jogo possui personagens, sensores e alarmes que precisam reagir uns aos outros por meio de um controlador central de eventos.

Leia o código abaixo, identifique o problema conceitual relacionado ao acoplamento entre componentes e sugira como melhorá-lo em alto nível usando Mediator.

class CampoEmail {
public void mostrar() {
System.out.println("Campo de e-mail visivel");
}
public void esconder() {
System.out.println("Campo de e-mail escondido");
}
}
class CheckboxModoCadastro {
private final CampoEmail campoEmail;
public CheckboxModoCadastro(CampoEmail campoEmail) {
this.campoEmail = campoEmail;
}
public void alternar(boolean modoCadastro) {
if (modoCadastro) {
campoEmail.mostrar();
} else {
campoEmail.esconder();
}
}
}

Considere na resposta os conceitos de coordenação centralizada, dependência entre componentes, reutilização e organização do fluxo de interação.

Uma equipe quer refatorar uma tela de autenticação em que botão, checkbox, campos e mensagens de erro se conhecem diretamente. O objetivo é reduzir o acoplamento entre esses componentes sem impedir sua colaboração. Qual alternativa descreve melhor a solução?

A. Usar Mediator para centralizar a comunicação entre os componentes da tela.

B. Usar Prototype para clonar os componentes sempre que houver uma nova interação.

C. Usar Singleton para garantir que exista apenas um campo de texto no sistema.

D. Usar Flyweight para compartilhar estado visual entre todos os formulários.

Gabarito: alternativa A.

Implemente uma solução simples usando Mediator para representar uma tela de matrícula em um sistema acadêmico.

  • Crie uma interface Mediator com um método como notificar(remetente, evento).
  • Crie dois componentes: um CheckboxBolsa e um CampoCodigoBolsa.
  • Faça o checkbox notificar o mediador quando for marcado ou desmarcado.
  • Faça o mediador decidir quando o campo de código deve ser exibido ou escondido.
  • Adicione um BotaoEnviar que também notifique o mediador quando for clicado.
  • No main, demonstre a interação entre esses componentes.