Latest web development tutorials

Motif Visiteur

Dans le motif de visiteur (Pattern Visiteur), nous utilisons une classe de visiteur, il modifie les classes d'éléments de l'algorithme d'exécution. De cette façon, la mise en oeuvre de l'algorithme peut être un élément de visiteur est modifié. Ce type de modèles de conception appartiennent schémas comportementaux. Selon modèle, objet élément a accepté les visiteurs cibles, afin que les visiteurs peuvent manipuler des objets d'exploitation objet élément.

introduction

Intention: La structure principale des données et la manipulation des données de séparation.

Principalement à résoudre: une structure de données stable , et le problème de couplage de fonctionnement variable.

Quand l'utiliser: la nécessité d'une structure cible d'objets dans de nombreuses actions différentes et indépendantes, mais ces actions doivent éviter la «pollution» de la classe de ces objets, l'utilisation des visiteurs de ces paquets à la classe.

Comment corriger: la classe est accessible à l' intérieur ainsi que d' une réception de visiteurs étrangers pour fournir l' interface.

Le code clé: la classe de base de données qui a une méthode pour accepter les visiteurs, elle - même une référence pour les visiteurs entrants.

Exemple d' application:Vous êtes un invité à la maison d'un ami, vous êtes un visiteur, un ami accepte votre visite à travers la description de votre ami, puis la description d'un ami pour faire un jugement, ce qui est le motif de visiteur.

Avantages: 1, en conformité avec le principe de responsabilité unique.2, une excellente évolutivité. 3, la flexibilité.

Inconvénients: 1, les éléments spécifiques du visiteur ont annoncé les détails d'une violation du principe de Demeter.2, les éléments spécifiques du changement plus difficile. 3, en violation du principe d'inversion de dépendance, comptent sur une classe spécifique qui ne repose pas sur l'abstraction.

Scénarios d' utilisation:1, l'objet correspondant à la structure de classe d'objet change rarement, mais ont souvent besoin de définir une nouvelle opération sur cette structure de l' objet. 2, la nécessité d'une structure cible d'objets dans de nombreuses actions différentes et indépendantes, mais ces actions doivent éviter la «pollution» de la classe de ces objets, nous ne voulons pas modifier ces classes lorsque vous ajoutez une nouvelle opération.

Remarque: Les visiteurs peuvent être fonction unifiés, vous pouvez faire un rapport, l' interface utilisateur, l' interception et le filtre.

réalisation

Nous allons créer une définition de l' interface opérationde ComputerPartacceptable.Clavier,souris, moniteur et l'ordinateurà réaliser l'interfaceComputerPartdes classes d'entités. Nous allons définir une autreComputerPartVisitor d'interface,qui définit le type d'opération pour les visiteurs. utiliser l'ordinateurvisiteurs entité de prendre les mesures appropriées.

VisitorPatternDemo,nous démontrons l'utilisation de l'ordinateurdeclasse,classeComputerPartVisitorpour démontrer l'utilisation du motif de visiteur.

pattern Visitor diagramme UML

Etape 1

Définir une interface qui représente l'élément.

ComputerPart.java

classe d'interface publique ComputerPart {
   public void accepter (ComputerPartVisitor computerPartVisitor);
}

Etape 2

Créer étend les classes d'entités ci-dessus classe.

Keyboard.java

Clavier public class implémente ComputerPart {

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

Monitor.java

Moniteur public class implémente ComputerPart {

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

Mouse.java

public class souris implémente ComputerPart {

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

Computer.java

public class implémente Computer ComputerPart {
	
   ComputerPart [] parties;

   publique Computer () {
      pièces = new ComputerPart [] {new nouveau moniteur souris (), nouveau clavier (), ()};		
   } 


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

Etape 3

Définir une interface représentation des visiteurs.

ComputerPartVisitor.java

interface publique ComputerPartVisitor {
	visite public void (ordinateur Computer);
	visite public void (Mouse souris);
	visite public void (Keyboard clavier);
	visite public void (moniteur de surveillance);
}

Etape 4

Visiteurs entité créée pour atteindre la classe mentionnée ci-dessus.

ComputerPartDisplayVisitor.java

ComputerPartDisplayVisitor public class implémente ComputerPartVisitor {

   @Override
   visite public void (ordinateur Computer) {
      System.out.println ( "Résultats de l'ordinateur.");
   }

   @Override
   visite public void (Mouse souris) {
      System.out.println ( "Résultats de la souris.");
   }

   @Override
   visite public void (Keyboard clavier) {
      System.out.println ( "Résultats clavier.");
   }

   @Override
   visite public void (moniteur de moniteur) {
      System.out.println ( "Résultats Monitor.");
   }
}

Etape 5

UtilisezComputerPartDisplayVisitorpour montrer une partie del'ordinateur.

VisitorPatternDemo.java

public class VisitorPatternDemo {
   main (String [] args) {public static void

      ComputerPart ordinateur = new Computer ();
      computer.accept (nouveau ComputerPartDisplayVisitor ());
   }
}

Etape 6

Vérifiez la sortie.

Affichage de la souris.
Affichage clavier.
Affichage Monitor.
Affichage ordinateur.