🛡️ O que é?
No contexto de design de software, o Proxy é um padrão de projeto estrutural que atua como um intermediário entre o cliente e o objeto real. Ele intercepta chamadas tanto de requisições (requests) quanto de respostas (responses), podendo adicionar comportamentos adicionais antes ou depois da execução da lógica principal.
⚠️ Importante: Aqui estamos falando do Proxy como padrão de projeto, e não de proxies físicos de rede ou intermediadores HTTP.
🧩 Para que usar?
O Proxy pode ser utilizado para diversos propósitos, como:
- ✅ Aplicar regras e validações antes da chamada real
- 📝 Gerar logs ou métricas
- 🔐 Implementar segurança e controle de acesso
- 🚀 Adicionar cache
- 🧪 Criar simulações ou objetos "mockados"
Além disso, ele ajuda a manter seu código aderente ao princípio Open/Closed do SOLID, ou seja:
"Aberto para extensão, mas fechado para modificação"
Você estende comportamentos sem precisar alterar a lógica original da classe-alvo.
💡 Exemplo:
Vamos supor que você receba uma atividade de adicionar uma nova validação ao sistema, mas não pode violar o princípio OCP (Open/Closed Principle) — que diz que uma classe deve ser aberta para extensão, mas fechada para modificação.
Nesse caso, o padrão de projeto Proxy pode ser uma ótima solução:
// Interface comum
public interface Servico {
void executar();
}
// Proxy que adiciona lógica extra antes/depois da execução
public class ServicoProxy implements Servico {
private final Servico servicoReal;
public ServicoProxy(Servico servicoReal) {
this.servicoReal = servicoReal;
}
@Override
public void executar() {
System.out.println("FAZENDO A NOVA VALIDACAO INICIAL");
servicoReal.executar();
System.out.println("FAZENDO A NOVA VALIDACAO DEPOIS DA EXECUCAO");
}
}
// Implementação real do serviço
public class ServicoReal implements Servico {
@Override
public void executar() {
System.out.println("REGRA JA EXISTENTE");
}
}
Veja que a regra funcional já existente não foi alterada somente foi adicionado um novo comportamento na camada anterior.