Padrões-13 - Padrões Estruturais - Proxy
-
Upload
nicola-zagari -
Category
Technology
-
view
4.149 -
download
7
description
Transcript of Padrões-13 - Padrões Estruturais - Proxy
Padrões de Projeto
Padrões Estruturais
Proxy
2 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Proxy
• Provê um substituto para um outro objeto para controlar o acesso a ele
• Proxy é representante/substituto
• Também conhecido como Surrogate: substituto/representante
3 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Motivação• Uma razão para se controlar acesso a um
objeto é se adiar o “custo” de sua criação e inicialização até que realmente se precise usá-lo
• Exemplo: editor de documento que pode embutir objetos gráficos– Grandes imagens (raster) são custosas para
se criar– Abrir 1 doc devem ser uma ação rápida– Objeto é criado “sob demanda”, quando a
imagem se torna visível
4 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Motivação
• O que colocar no lugar?
• Como esconder o fato da criação sob demanda para não complicar a implementação do editor?
• Como não impactar na renderização e formatação do texto?
5 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Motivação
• Solução: usar um outro objeto (proxy), que aja como se fosse a imagem e se encarrega de instanciá-la, quando a mesma for requerida (e manter uma referência para a mesma para redirecionar futuras requisições)
6 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Motivação
7 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Aplicação
• Sempre que haja a necessidade de uma referência a um objeto mais versátil e sofisticada do que um simples ponteiro:
1. Um proxy remoto provê um representante local para um objeto em um espaço de endereçamento diferente
2. Um proxy virtual cria objetos “caros” sob demanda
8 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Aplicação
3. Um proxy de proteção controla o acesso ao objeto original
– útil quando objetos devem ter direitos de acesso diferentes
4. Uma referência esperta é um substituto para um ponteiro que realiza ações adicionais quando um objeto é acessado, ex:
– Para contar o número de referências ao objeto real com o propósito de garbage collection (também conhecido como ponteiro esperto)
– Para carregar um objeto persistente na memória quando ele é referenciado a primeira vez
– Para checar que o objeto real está travado antes que ele seja acessado, assegurando que nenhum outro objeto o altere
9 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Estrutura
10 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Estrutura
11 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Participantes
• Proxy (ImageProxy)– Mantém uma referência que permite o proxy
acessar o objeto real
– Provê uma interface idêntica a de Subjectpara que o proxy possa substituir o objeto real
– Controla o acesso ao objeto real e pode ser responsável pela criação e remoção do mesmo
12 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Participantes
– Outras responsabilidades dependem do tipo de proxy:
• Remote proxies• Virtual proxies• Protection proxies
• Subject (Graphic)– Define a interface comum para RealSubject e Proxy,
para que um Proxy possa ser usado em qualquer lugar que um RealSubject seja esperado
• RealSubject (Image)– Define o objeto real que o proxy representa
13 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Colaborações
• Proxy encaminha as requisições para o RealSubject quando apropriado, dependendo do tipo de proxy
14 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Conseqüências
• Adiciona 1 nível de indireção. O uso da mesma depende do tipo:
– Remote proxy: esconde o fato do objeto real residir em um espaço de enderaçamento diferente
– Virtual proxy: provê otimizações, tais como criar um objeto sob demanda
– Protection Proxy e Smart References: permitem tarefas “caseiras” adicionais qdo um obj é acessado
• Outra otimização: copy-on-write
15 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Implementação• Sobrecarga do operador de acesso a membro
em C++ ( ->):
✗ Permite realizar tarefas adicionais sempre que um objeto é referenciado ( o proxy se comporta como um ponteiro )
16 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Implementação
17 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Implementação
18 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo: Virtual Proxy
19 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo
20 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo
21 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo
22 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo
23 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo
24 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Exemplo