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.
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.