Proxy - design patterns
Objetivo
O Padrão Proxy visa permitir que clientes de um serviço utilizem uma referência do objeto real que oferece o serviço. Aumenta a eficiência, a segurança e facilita o acesso. O Proxy pode substituir o servidor quando ocorrem problemas com o servidor e também permite criar uma independência de endereçamento e implementação do servidor.
Uma situação: Um cliente precisa acessar um serviço de um outro objeto em um sistema distribuído. O acesso direto é tecnicamente possível, mas pode não ser a melhor opção. O acesso direto pode não ser eficiente em tempo de execução, ter alto custo e não ser seguro.
O cliente não precisa ficar dependente de endereço de rede do objeto.
Então utiliza-se uma referência do cliente que ofereça o serviço de forma idêntica e realize pré e pós-processamento adicionais para garantir a qualidade do serviço. O objeto real que realiza o trabalho fica escondido pelo Proxy. Isto é aplicável sempre que houver a necessidade de ter uma referência mais versátil e sofisticada para um objeto do que um simples ponteiro. Proxies podem ser serializados. Substituir um objeto por um Proxy, ou vice-versa, deve ser transparente ao cliente.
O Proxy tem diversas finalidades: delegação, segurança (firewall), RMI, etc.
Situações comuns:
· Proxy remoto - providencia um representante local de um objeto que se encontra num espaço de endereçamento diferente.
· Proxy virtual - cria objetos dispendiosos apenas por pedido (on demand).
· Proxy de proteção - controla o acesso ao objeto original.
· Smart Reference - é um substituto de um ponteiro básico que, executa ações adicionais, quando o objeto é acessado.
Estrutura do Proxy
Proxy: Mantém uma referência que permite acessar o objeto real.
Subject: Define uma interface que é implementada por RealSubject e Proxy.
RealSubject: Define o objeto real que o proxy representa.
Participações:
· Subject: Define uma interface comum para o RealSubject e o Proxy. Desta forma, o Proxy pode ser usado