Lista de Exercícios 012: Proxy
Exercício 1 : Situações para análise
Seção intitulada “Exercício 1 : Situações para análise”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.
- 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.
- Situação 2: uma classe simples calcula média de notas a partir de dois números, sem custo relevante e sem acesso externo.
- 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.
- Situação 4: uma imagem muito grande deve ser carregada apenas quando o usuário realmente abrir a tela de visualização.
- Situação 5: o sistema precisa mudar uma interface incompatível de uma biblioteca antiga para se adaptar a uma nova API.
Exercício 2 : Código com problema
Seção intitulada “Exercício 2 : Código com problema”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.
Exercício 3 : Múltipla escolha
Seção intitulada “Exercício 3 : Múltipla escolha”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.
Exercício 4 : Implementação simples
Seção intitulada “Exercício 4 : Implementação simples”Implemente uma solução simples usando Proxy para representar o acesso a um documento sigiloso em um sistema acadêmico.
- Crie uma interface
DocumentoServicecom o métodoabrirDocumento(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.