Design Patterns — Parte 14 — Proxy

Jones Roberto
Dec 3, 2019 · 4 min read

Intenção

Proxy é um padrão de design estrutural que permite fornecer um substituto ou espaço reservado para outro objeto. Um proxy controla o acesso ao objeto original, permitindo que você execute algo antes ou depois que a solicitação chega ao objeto original.

Problema

Você precisa oferecer suporte a objetos com fome de recursos e não deseja instanciar esses objetos, a menos e até que eles sejam realmente solicitados pelo cliente.

Solução

O padrão Proxy sugere que você crie uma nova classe de proxy com a mesma interface que um objeto de serviço original. Em seguida, você atualiza seu aplicativo para que ele transmita o objeto proxy para todos os clientes do objeto original. Ao receber uma solicitação de um cliente, o proxy cria um objeto de serviço real e delega todo o trabalho para ele.

O proxy se disfarça de objeto de banco de dados. Ele pode lidar com inicialização lenta e cache de resultados sem o cliente ou o objeto de banco de dados real saiba.

Mas qual é o benefício? Se você precisar executar algo antes ou depois da lógica primária da classe, o proxy permitirá fazer isso sem alterar essa classe. Como o proxy implementa a mesma interface que a classe original, ele pode ser passado para qualquer cliente que espera um objeto de serviço real.

Implementação

O diagrama de classes UML para a implementação do padrão de design do proxy é fornecido abaixo:

As classes, interfaces e objetos no diagrama de classes UML acima são os seguintes:

Essa é uma interface com membros que serão implementados pelas classes RealSubject e Proxy.

Esta é uma classe que queremos usar com mais eficiência usando a classe proxy.

Esta é uma classe que contém a instância da classe RealSubject e pode acessar os membros da classe RealSubject, conforme necessário.

Prós

  • Você pode controlar o objeto de serviço sem que os clientes saibam disso.
  • Você pode gerenciar o ciclo de vida do objeto de serviço quando os clientes não se importam com isso.
  • O proxy funciona mesmo se o objeto de serviço não estiver pronto ou não estiver disponível.
  • Princípio Aberto / Fechado . Você pode introduzir novos proxies sem alterar o serviço ou os clientes.

Contras

  • O código pode se tornar mais complicado, pois você precisa introduzir muitas novas classes.
  • A resposta do serviço pode demorar.

Exemplo

As classes, interfaces e objetos no diagrama de classes acima podem ser identificados da seguinte maneira:

IClient- interface Subject.

RealClient — classe RealSubject.

ProxyClient — classe Proxy.

Bom vamos lá, vou tentar dar um exemplo simples e direto. Vou começar criando a interface IClient que será nosso subject e ela irá conter o seguinte código:

public interface IClient
{
string GetData();
}

Em seguida irei adicionar classe RealSubject que irá implementar IClient, e ela irá conter o seguinte código:

public class RealClient : IClient
{
string Data;
public RealClient()
{
Console.WriteLine("Real Client: Initialized");
Data = "XP Inc. Medium";
}

public string GetData()
{
return Data;
}
}

Em seguida iremos criar nosso proxy, e a classe irá conter o seguinte código:

public class ProxyClient : IClient
{
RealClient client = new RealClient();
public ProxyClient()
{
Console.WriteLine("ProxyClient: Initialized");
}

public string GetData()
{
return client.GetData();
}
}

E por último vamos modificar no Program.cs, e ele ficará com o seguinte código:

class Program
{
static void Main(string[] args)
{
var proxy = new ProxyClient();
Console.WriteLine($"Data from Proxy Client = {proxy.GetData()}");
Console.WriteLine("Press any key to close!");
Console.ReadKey();
}
}

Bom pessoal, em todos os posts estou tentando simplificar os exemplos, vou ficando por aqui, não deixe de acompanhar a postagem da semana que vem irei falar do próximo pattern da lista.

Não esqueça que os exemplos estão no Github. Abraço, até mais pessoal.


XP Inc.

Aqui você vai encontrar os principais conteúdos de tecnologia da XP Inc.

Jones Roberto

Written by

Gerente de Desenvolvimento na XP Inc. , jogador de vídeo game, viciado em séries e .Net.

XP Inc.

XP Inc.

Aqui você vai encontrar os principais conteúdos de tecnologia da XP Inc.

More From Medium

More on Design Patterns from XP Inc.

More on Design Patterns from XP Inc.

Design Patterns — Parte 22 —State

Jones Roberto
Feb 19 · 4 min read

1

More on Design Patterns from XP Inc.

More on Design Patterns from XP Inc.

Design Patterns — Parte 21 — Observer

Jones Roberto
Feb 4 · 4 min read

1

More on Xp Labs from XP Inc.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade