017 – Padrão de Projeto PROXY – Curso de Padrão de Projeto – Design Pattern
Playlist do Curso de Padrão de Projeto de Software (Design Patterns)
O Padrão de Projeto Proxy possui três principais finalidades, sendo elas:
Prover um substituto ou placeholder para um outro objeto controlar seu acesso.
Usar um nível extra de indireção para fornecer acesso distribuído, controlado ou inteligente.
Adicionar um agregador e delegador para proteger o componente real de complexidade indevida.
Problema
Você precisa implementar objetos que precisam de muitos recursos, mas você não quer instanciar tais objetos a menos/até que eles sejam requisitados pelo cliente.
Discussão
Desenvolver um substituto, ou proxy, objeto que: instancia o objeto real na primeira vez que o cliente faz uma solicitação de proxy, lembra a identidade desse objeto real, e então redireciona a requisição para o objeto real. Então todas as requisições subsequentes são simplesmente redirecionadas diretamente para o objeto real encapsulado.
Essas são as quatro situações mais comuns em que o padrão Proxy é aplicável.
Um proxy virtual é um placeholder para objetos “caros de se criar”. O objeto real é criado apenas quando um cliente requerer ou acessar o objeto.
Um proxy remoto provê um acesso para um objeto que reside em um espaço de endereço diferente. Isso é o que o código “stub” em RPC e CORBA provê.
Um proxy protetor controla o acesso a um objeto alvo. O objeto “substituto” verifica se o cliente tem as permissões requisitadas para o redirecionamento da requisição. Se sim, a mensagem será repassada para o objeto alvo, senão, o proxy bloqueará o acesso e retornará um resultado de erro.
Um proxy inteligente interpõe ações adicionais quando um objeto é acessado. Usos típicos incluem:
Contar o número de referências ao objeto real para que seja libertado automaticamente assim que não houver mais referências.
Carregar um objeto persistente na memória quando for referenciado pela primeira vez.
Verificar se o objeto real está travado antes de ser acessado para assegurar que nenhum outro objeto possa mudá-lo.
Estrutura
Definindo a interface Subject, a presença do objeto Proxy estando no lugar do RealSubject é transparente ao cliente.