Skip to content

Proxy

Histórico de revisões

Data Versão Descrição Autor
19/10/2019 0.1 Abertura do documento Elias Bernardo

1 - Introdução

O 5w2h é um checklist de determinadas atividades que precisam ser desenvolvidas com o máximo de clareza possível. Por ser uma ferramenta extremamente versátil, o grupo optou por utizá-la, destrinchando os principais aspectos do pattern Proxy de forma simples e direta.

2 - 5W2H

2.1 What?

Etimologia

Proxy é á a contração da palavra anglo-normanda procuracie, que vem do latin medieval procuratia., e significa algo como:

  • Um agente ou substituto autorizado a agir por outra pessoa
  • A autoridade para agir por outro; carta de procuração

O Padrão

O Pattern Proxy é um padrão Estrutural definido pelo GoF (Gang of Four). O seu objetivo principal é encapsular um objeto através de um outro objeto que possui a mesma interface, de forma que o segundo objeto, conhecido como “Proxy”, controla o acesso ao primeiro, que é o objeto real.

Imagem

2.2 When?

O Proxy é utilizado principalmente quando:

  • O acesso a um objeto deve ser controlado (Protection Proxies).
  • Funcionalidades adicionais devem ser fornecidas ao acessar um objeto (Smart References).
  • 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 (Virtual Proxies).

Podemos citar ainda os Remote Proxies e as Smart References, que são implementações do proxy que buscam resolver alguns outros problemas como fornecer uma representação local para um objeto que esteja em um espaço de endereço diferente e fornecer um acesso sofisticado a determinados objetos, respectivamente.

2.3 Why?

Às vezes, precisamos da capacidade de controlar o acesso a um objeto. Por exemplo, se precisarmos usar apenas alguns métodos de alguns objetos custosos/pesados, inicializaremos esses objetos quando precisarmos deles completamente. Até esse ponto, podemos usar alguns objetos leves, expondo a mesma interface que os objetos pesados. Esses objetos leves são chamados de proxies e eles instanciam esses objetos pesados quando realmente são necessários; então, usaremos alguns objetos leves.

Essa capacidade de controlar o acesso a um objeto pode ser necessária por vários motivos: controlar quando um objeto caro precisa ser instanciado e inicializado, concedendo direitos de acesso diferentes a um objeto, além de fornecer um meio sofisticado de acessar e referenciar objetos executando em outros processos, em outras máquinas.

2.4 Who?

Linguagens com um pé em programação orientada a objetos, como Java por exemplo.

2.5 How?

Exemplo de código

Referências

  • [1] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1994). Design Patterns: Elements of Reusable Object-Oriented Software

  • [2] https://en.wiktionary.org/wiki/proxy

  • [3] https://www.oodesign.com/proxy-pattern.html