Latest web development tutorials

padrão do visitante

No padrão do visitante (padrão do visitante), usamos uma classe visitante, ele altera as classes de elemento algoritmo execução. Deste modo, com a aplicação do algoritmo pode ser um elemento de visitante é alterada. Este tipo de padrões de projeto pertencem padrões comportamentais. Segundo teste padrão, elemento de objeto aceitou os visitantes alvo, para que os visitantes podem manipular objetos que operam elemento de objeto.

introdução

Intenção: A estrutura principal da separação de manipulação de dados e de dados.

Principalmente para resolver: a estrutura de dados estável e problema de acoplamento operacional variável.

Quando usar: a necessidade de uma estrutura alvo de objetos em muitas ações diferentes e independentes, mas estas acções devem evitar a "contaminação" da classe desses objetos, o uso de visitantes para estes pacotes para a classe.

Como corrigir: a classe é acessada dentro além de uma recepção de visitantes estrangeiros para fornecer interface.

O código de chave: classe de base de dados que apresenta um método para aceitar visitantes, em si uma referência para os visitantes de entrada.

Exemplo de aplicação: Você é um convidado na casa de um amigo, você é um visitante, um amigo aceita a sua visita através da descrição do seu amigo, então a descrição de um amigo para fazer um julgamento, que é o padrão do visitante.

Vantagens: 1, em linha com o princípio da responsabilidade individual.2, excelente escalabilidade. 3, a flexibilidade.

Desvantagens: 1, os elementos específicos do visitante anunciou detalhes de uma violação do princípio da Demeter.2, os elementos específicos das alterações mais difícil. 3, em violação do princípio de inversão de dependência, dependem de uma classe específica, que não depende de abstração.

cenários de uso: 1, o objeto correspondente à estrutura de classe de objeto raramente muda, mas muitas vezes precisa definir uma nova operação neste estrutura do objeto.2, a necessidade de uma estrutura alvo de objetos em muitas ações diferentes e independentes, mas estas acções devem evitar a "contaminação" da classe desses objetos, não queremos modificar essas classes quando você adiciona uma nova operação.

Nota: Os visitantes podem ser unificados função, você pode fazer um relatório, UI, interceptar e filtro.

realização

Vamos criar uma definição de interface de operaçãoComputerPartaceitável.Teclado,mouse, monitor edocomputador alcançar a interfaceComputerPartclasses de entidade. Vamos definir outraComputerPartVisitor interface,que define o tipo de operação para os visitantes.Computadorutilizar visitantes entidade tomar as medidas adequadas.

VisitorPatternDemo,que demonstram a utilização docomputador classe,classeComputerPartVisitorpara demonstrar a utilização do padrão de visitante.

padrão do visitante UML diagrama

passo 1

Definir uma interface que representa o elemento.

ComputerPart.java

ComputerPart classe de interface pública {
   public void aceitar (ComputerPartVisitor computerPartVisitor);
}

passo 2

Criar estende as classes de entidade acima da classe.

Keyboard.java

public class Keyboard implementa ComputerPart {

   @Override
   public void aceitar (ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit (this);
   }
}

Monitor.java

classe pública monitor implementa ComputerPart {

   @Override
   public void aceitar (ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit (this);
   }
}

Mouse.java

classe pública Rato implementa ComputerPart {

   @Override
   public void aceitar (ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit (this);
   }
}

Computer.java

public class Computer implementa ComputerPart {
	
   ComputerPart [] partes;

   pública Computer () {
      peças = new ComputerPart [] {new Mouse (), novo teclado (), o novo Monitor ()};		
   } 


   @Override
   public void aceitar (ComputerPartVisitor computerPartVisitor) {
      for (int i = 0; i <parts.length; i ++) {
         partes [i] .Aceitar (computerPartVisitor);
      }
      computerPartVisitor.visit (this);
   }
}

passo 3

Definir uma interface visitante representação.

ComputerPartVisitor.java

ComputerPartVisitor interface pública {
	pública visita void (computador Computer);
	visita public void (tapete do rato);
	visita public void (teclado Teclado);
	visita public void (monitor Monitor);
}

passo 4

Visitantes entidade criada para atingir a classe acima mencionada.

ComputerPartDisplayVisitor.java

classe pública ComputerPartDisplayVisitor implementa ComputerPartVisitor {

   @Override
   pública visita void (computador Computer) {
      System.out.println ( "Resultados computador.");
   }

   @Override
   pública visita void (Rato) {
      System.out.println ( "Resultados Mouse.");
   }

   @Override
   visita public void (teclado teclado) {
      System.out.println ( "Resultados teclado.");
   }

   @Override
   visita public void (monitor Monitor) {
      System.out.println ( "Resultados Monitor.");
   }
}

passo 5

UseComputerPartDisplayVisitorpara mostrar parte docomputador.

VisitorPatternDemo.java

classe pública VisitorPatternDemo {
   main (String [] args) public static void {

      ComputerPart computador = new Computer ();
      computer.accept (nova ComputerPartDisplayVisitor ());
   }
}

passo 6

Verifique saída.

Exibindo Mouse.
Exibindo teclado.
Resultados monitor.
Exibindo computador.