Latest web development tutorials

modo de proxy

No modo de proxy (Padrão Proxy), uma classe de funções em nome de outra classe. Este tipo de padrões de projeto pertencem ao modelo estrutural.

No modo proxy, criamos um objeto com um objeto existente, a fim de fornecer uma interface funcional para o mundo exterior.

introdução

Intenção: proporcionar um agente para controlar o acesso a esse objeto para outros objetos.

Principal Resolução: acesso direto ao objeto causou problemas, tais como: o objeto que você deseja acessar na máquina remota.Em sistemas orientados a objetos, alguns objetos, por algum motivo (como a criação do objeto é caro, ou certas ações exigem controles de segurança ou de acesso fora do processo), que dará aos usuários acesso direto a configuração do sistema ou um monte de problemas, podemos adicionar uma camada para acessar esse objeto no momento do acesso a esse objeto.

Quando usar: quando você quer fazer algo para controlar o acesso a uma classe.

Como corrigir: adicionar camada intermediária.

O código de chave: ligação com as combinações de classe proxy.

Exemplos de aplicação: 1, o Windows atalhos dentro.2, o porco foi para a mudança de resultado do macaco Cuilan, pode ser entendida: o alto aparência Cuilan resumido, alta de turquesa Azul I e ​​Macaco implementa essa interface, Pig acesso de alta Cuilan quando não vê o Rei Macaco, de modo que o Rei Macaco é uma alta Cuilan classe de proxy. 3, não necessariamente para comprar bilhetes de trem na estação para comprar, você também pode ir para os pontos de venda. 4, um cheque ou um certificado de depósito bancário é um dos fundos de conta de proxy. Verifique transações no mercado é usado em vez de dinheiro, e fornece controle de conta de capital do emitente. 5, aop primavera.

Vantagens: 1, responsabilidades claras.2, de alta escalabilidade. 3, inteligente.

Desvantagens: 1, como entre o cliente eo tema real que o objeto proxy, de modo algum tipo de modo de proxy pode resultar em pedido velocidade de processamento mais lento.2, para alcançar o modo de proxy requer um trabalho adicional para conseguir algum modo proxy é muito complexa.

cenários de uso: de acordo com a divisão de responsabilidades, geralmente têm os seguintes cenários de uso: 1, Agente Remoto.2. As indicações. 3, Copy-on-Write agentes. 4, a protecção (Protect ou Access) agente. 5, agente de cache. 6, firewall (Firewall) agente. 7, a sincronização (sincronização) de agente. 8, as referências inteligentes (Smart Referência) agente.

Nota: A diferença entre 1 e adaptador modos: padrão Adapter grandes mudanças contemplada a interface do objeto e modo de proxy não pode ser alterado por agentes da interface de classe.A diferença entre os 2 e decorador padrões: Decorator para melhorar a funcionalidade e modo de proxy é para ser controlado.

realização

Nós vamos criar uma interface deimageme implementação da interfaceImagemclasses de entidade.ProxyImageé uma classe de proxy, reduzindo consumo de memóriaRealImageobjetos carregados.

ProxyPatternDemo,demonstramos o uso de classeProxyImagepara obterumobjetode imagema ser carregada e exibida na demanda.

padrão Proxy UML diagrama

passo 1

Criar uma interface.

Image.java

interface pública Imagem {
   exibição void ();
}

passo 2

Criar classe de entidade que implementa a interface.

RealImage.java

classe pública RealImage implementa Imagem {

   fileName private String;

   RealImage público (fileName String) {
      this.fileName = Nome do arquivo;
      loadFromDisk (fileName);
   }

   @Override
   exibição public void () {
      System.out.println ( "Resultados" + fileName);
   }

   vazio loadFromDisk privada (fileName String) {
      System.out.println ( "Loading" + fileName);
   }
}

ProxyImage.java

classe pública ProxyImage implementa Imagem {

   RealImage realImage privado;
   fileName private String;

   ProxyImage público (fileName String) {
      this.fileName = Nome do arquivo;
   }

   @Override
   exibição public void () {
      if (realImage == null) {
         realImage = new RealImage (fileName);
      }
      realImage.display ();
   }
}

passo 3

Quando solicitado, useProxyImagepara obter objeto de classeRealImage.

ProxyPatternDemo.java

classe pública ProxyPatternDemo {
	
   main (String [] args) public static void {
      imagem imagem = new ProxyImage ( "test_10mb.jpg");

      // Carrega a imagem de image.display disco (); 
      System.out.println ( "");
      // As imagens não podem ser carregados a partir image.display disco (); 	
   }
}

passo 4

Verifique saída.

Carregando test_10mb.jpg
Exibindo test_10mb.jpg

Exibindo test_10mb.jpg