Este artigo descreve o problema de resolver a distribuição do vinho tinto com base no modelo de proxy do Java. Compartilhe -o para sua referência, como segue:
1. Definição do padrão
No modo proxy, dois objetos participam do processamento da mesma solicitação. A solicitação recebida é confiada pelo objeto proxy ao objeto real para processar. O objeto proxy controla o acesso da solicitação, que reproduz uma ponte mediadora entre o aplicativo cliente e o objeto real. O modo proxy usa agregação de objeto em vez de herança, reduzindo efetivamente o acoplamento entre os módulos de software.
2. Exemplos de modelo
1 Análise de padrão
Emprestamos a distribuição de vinhos para ilustrar este modelo.
2 Diagrama de classe estática no modo proxy
3 exemplos de código
3.1 Interface de fábrica de vinho tinto 1 Iredwine
pacote com.demo.real;/** * interface de vinho tinto * * @author * */interface pública Iredwine {// Método para produzir produtos public vocos de vinho tinto (); // Método para vender Vinho Public Void Sell ();}3.2 Realização de uma realadaWineFactory na fábrica de vinho tinto
pacote com.demo.real.impl; importar com.demo.real.iredwine;/** * fábrica de produção de vinhos real * * @author * */public class RealredWineFactory implementa IREDWINE {// Método para produzir Wine Wine Factory @Override public void Product () {System.out.Println; } // Método para vender o vinho público Void Sell () {System.out.println ("Fábrica de vinho tinto vende vinho tinto ..."); }}3.3 Crie um agente de vinho tinto - RedwineProxy
pacote com.demo.proxy; importar com.demo.real.iredwine;/** * agente de vinho tinto * * @author * */public class RedwineProxy implementa Iredwine {// fabricante de vinho tinto real privado final Iredwine Redwine; // permissão do agente para vender o vinho tinto Private Final Boolean Permission = true; // Método de construção padrão public RedwineProxy (Iredwine Redwine) {this.redwine = Redwine; } // Método do agente para produzir vinho tinto (o agente não produz vinho tinto e leva o vinho da fábrica real para vender) @Override public void Product () {// Determine se o agente tem o direito de ser um vinho tinto se (este.Println) {// O agente tem o direito de vender vinho tinto é um sistema legal.out.println ("this é um winem Legal" the Is A Legal Wine "A Winer Legal é um vinho tinto Legal é um System Legal. System.out.println ("O agente recebe um pedido e notifica a fábrica para produzir ..."); this.redwine.product (); } else {System.out.println ("[Este é um agente de vinho tinto ilegal!]"); }} // Como vender vinho tinto para agente @Override public void Sell () {if (this.permission) {this.redwine.sell (); System.out.println ("O agente recebe vinho tinto por atacado da fábrica e o vende a um preço mais alto, ganhando uma certa diferença dele ..."); } else {System.out.println ("[Este é um agente de vinho tinto ilegal!]"); }}}3.4 Vá ao agente do vinho para comprar cliente de vinho tinto
pacote com.demo; importar com.demo.proxy.redwineproxy; importar com.demo.real.iredwine; importar com.demo.real.impl.realredwinefactory;/** * aplicação principal * * @author * */public client {/** ** * @param args */public static Vort Vort Vor) Irredwine realredwinefactory = new realredWineFactory (); // Obter proxy objeto instância iRedwine RedwineProxy = new RedwineProxy (RealredWineFactory); // agente produz vinho tinto (na verdade, a produção real é a fábrica) redwineproxy.product (); // Agente vende vinho tinto (preço por atacado, depois o vende a um preço mais alto para ganhar a diferença) RedwineProxy.sell (); }}4 resultados de execução
[Este é um agente legal de vinho tinto]
O agente recebeu o pedido e notificou a fábrica para produzir ...
Fábrica de vinho tinto produz vinho tinto ...
Fábrica de vinho tinto vende vinho tinto ...
O agente recebe vinho tinto por atacado da fábrica e o vende a um preço mais alto, ganhando uma certa diferença de preço ...
Iii. Os princípios de design deste padrão
1 atraso no carregamento para melhorar a eficiência do sistema
2 Princípio de responsabilidade única
4. Use ocasiões
1 Proxy remoto: fornece um proxy local para um objeto em diferentes espaços de endereço.
2 Agente virtual: se a criação de um objeto for demorada, você poderá chamá-lo através do objeto proxy. Antes que o objeto real seja criado, uma chamada falsa é retornada. Quando o objeto real é criado, a chamada do método correspondente do objeto real é retornada ao cliente.
3 Agente de proteção controla o acesso ao objeto original.
4 Diretrizes inteligentes substituem ponteiros simples, que executam algumas operações adicionais ao acessar objetos.
V. Diagrama de classe estática do modo proxy
RESUMO PROPRIA: Uma interface comum que declara objetos reais e objetos de proxy.
Papel real: o objeto de destino que realmente lida com a solicitação.
Função do agente: a função de objeto proxy contém referências a objetos reais, para que o objeto proxy possa converter a solicitação em objetos reais para processamento. Ao mesmo tempo, o objeto proxy também pode adicionar operações adicionais antes e depois da execução da operação real do objeto.
Para mais conteúdo relacionado ao Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo da operação Java Dom Node Tips", "Resumo de Dicas de Operação de Arquivos e Diretórios de Java" e "Resumo das dicas de operação do Java Cache"
Espero que este artigo seja útil para a programação Java de todos.