Padrões-13 - Padrões Estruturais - Proxy

24
Padrões de Projeto Padrões Estruturais Proxy

description

Padrões de Projeto. Padrão Estrutural. Proxy.

Transcript of Padrões-13 - Padrões Estruturais - Proxy

Page 1: Padrões-13 - Padrões Estruturais - Proxy

Padrões de Projeto

Padrões Estruturais

Proxy

Page 2: Padrões-13 - 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

Page 3: Padrões-13 - Padrões Estruturais - Proxy

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

Page 4: Padrões-13 - Padrões Estruturais - Proxy

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?

Page 5: Padrões-13 - Padrões Estruturais - Proxy

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)

Page 6: Padrões-13 - Padrões Estruturais - Proxy

6 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Motivação

Page 7: Padrões-13 - Padrões Estruturais - Proxy

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

Page 8: Padrões-13 - Padrões Estruturais - Proxy

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

Page 9: Padrões-13 - Padrões Estruturais - Proxy

9 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Estrutura

Page 10: Padrões-13 - Padrões Estruturais - Proxy

10 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Estrutura

Page 11: Padrões-13 - Padrões Estruturais - Proxy

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

Page 12: Padrões-13 - Padrões Estruturais - Proxy

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

Page 13: Padrões-13 - Padrões Estruturais - Proxy

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

Page 14: Padrões-13 - Padrões Estruturais - 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

Page 15: Padrões-13 - Padrões Estruturais - Proxy

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 )

Page 16: Padrões-13 - Padrões Estruturais - Proxy

16 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Implementação

Page 17: Padrões-13 - Padrões Estruturais - Proxy

17 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Implementação

Page 18: Padrões-13 - Padrões Estruturais - Proxy

18 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Exemplo: Virtual Proxy

Page 19: Padrões-13 - Padrões Estruturais - Proxy

19 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Exemplo

Page 20: Padrões-13 - Padrões Estruturais - Proxy

20 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Exemplo

Page 21: Padrões-13 - Padrões Estruturais - Proxy

21 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Exemplo

Page 22: Padrões-13 - Padrões Estruturais - Proxy

22 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Exemplo

Page 23: Padrões-13 - Padrões Estruturais - Proxy

23 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Exemplo

Page 24: Padrões-13 - Padrões Estruturais - Proxy

24 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Exemplo