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

4,991 views
4,824 views

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,991
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
186
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. Padrões de Projeto Padrões Estruturais Proxy
  2. 2. Proxy • Provê um substituto para um outro objeto para controlar o acesso a ele • Proxy é representante/substituto • Também conhecido como Surrogate: substituto/representante 2 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  3. 3. 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 3 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  4. 4. 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? 4 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  5. 5. 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) 5 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  6. 6. Motivação 6 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  7. 7. 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 7 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  8. 8. 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 8 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  9. 9. Estrutura 9 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  10. 10. Estrutura 10 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  11. 11. Participantes • Proxy (ImageProxy) – Mantém uma referência que permite o proxy acessar o objeto real – Provê uma interface idêntica a de Subject para 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 11 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  12. 12. 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 12 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  13. 13. Colaborações • Proxy encaminha as requisições para o RealSubject quando apropriado, dependendo do tipo de proxy 13 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  14. 14. 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 14 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  15. 15. 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 ) 15 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  16. 16. Implementação 16 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  17. 17. Implementação 17 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  18. 18. Exemplo: Virtual Proxy 18 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  19. 19. Exemplo 19 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  20. 20. Exemplo 20 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  21. 21. Exemplo 21 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  22. 22. Exemplo 22 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  23. 23. Exemplo 23 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  24. 24. Exemplo 24 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma

×