Pular para o conteúdo

Lista de Exercícios 012: Proxy

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

  1. Situação 1: um sistema consulta um serviço remoto de emissão de boletos, e chamadas repetidas para a mesma fatura poderiam usar cache.
  2. Situação 2: uma classe simples calcula média de notas a partir de dois números, sem custo relevante e sem acesso externo.
  3. Situação 3: apenas coordenadores podem acessar um relatório disciplinar completo de alunos, mas o restante da aplicação deve continuar usando o mesmo contrato de serviço.
  4. Situação 4: uma imagem muito grande deve ser carregada apenas quando o usuário realmente abrir a tela de visualização.
  5. Situação 5: o sistema precisa mudar uma interface incompatível de uma biblioteca antiga para se adaptar a uma nova API.

Leia o código abaixo, identifique o problema conceitual relacionado ao acesso direto ao serviço remoto e sugira como melhorá-lo em alto nível usando Proxy.

class ControllerRelatorio {
public void exibir(int alunoId) {
RelatorioRemotoService service = new RelatorioRemotoService();
String relatorio = service.gerarRelatorio(alunoId);
System.out.println(relatorio);
}
}

Considere na resposta pontos como inicialização preguiçosa, cache, autorização e acoplamento do cliente à implementação concreta.

Uma equipe precisa permitir que a aplicação continue usando a mesma interface de consulta, mas quer validar permissões e registrar logs antes de acessar um serviço real. Qual alternativa descreve melhor a solução mais adequada?

a. Usar Proxy para intermediar o acesso ao serviço mantendo o mesmo contrato.

b. Usar Adapter para trocar a interface do serviço por outra incompatível.

c. Usar Facade para substituir completamente a interface por uma operação simplificada de subsistema.

d. Usar Builder para montar o serviço em etapas antes da execução.

e. Usar Strategy para escolher dinamicamente a implementação do serviço sem controle de acesso.

Implemente uma solução simples usando Proxy para representar o acesso a um documento sigiloso em um sistema acadêmico.

  • Crie uma interface DocumentoService com o método abrirDocumento(String usuario).
  • Crie uma implementação real chamada DocumentoRealService.
  • Crie um proxy chamado DocumentoProxy.
  • No proxy, permita acesso apenas para usuários com perfil adequado.
  • Se o documento já tiver sido carregado, reutilize o conteúdo em cache.
  • No main, use apenas a interface para interagir com o serviço.