Latest web development tutorials

modello Visitor

Nel modello visitatore (Pattern Visitor), usiamo una classe visitatore, cambia le classi di elementi algoritmo esecuzione. In questo modo, con l'implementazione dell'algoritmo può essere un elemento di visitatore viene modificato. Questo tipo di modelli di progettazione appartengono modelli comportamentali. Secondo motivo, elemento oggetto ha accettato il target di visitatori, così i visitatori possono gestire gli oggetti che operano oggetto elemento.

introduzione

Intento: La struttura principale dei dati e dei dati di separazione manipolazione.

Principalmente per risolvere: una struttura didati stabile e problemi di accoppiamento di funzionamento variabile.

Quando utilizzare: la necessità di una struttura di destinazione degli oggetti in molte azioni differenti e indipendenti, ma tali azioni devono evitare "inquinamento" della classe di questi oggetti, l'uso di visitatori a questi pacchetti alla classe.

Come risolvere: la classe si accede all'interno di una reception aperta di visitatori stranieri per fornire l'interfaccia.

Il codice chiave: la classe di base di dati, che ha un metodo di accettare i visitatori, per sé un riferimento per i visitatori in arrivo.

Esempio di applicazione: Tu sei un ospite a casa di un amico, sei un visitatore, un amico accetta la vostra visita attraverso la descrizione del tuo amico, poi la descrizione di un amico per dare un giudizio, che è il modello visitatore.

Vantaggi: 1, in linea con il principio di responsabilità singolo.2, eccellente scalabilità. 3, flessibilità.

Svantaggi: 1, gli elementi specifici del visitatore annunciato i dettagli di una violazione del principio di Demetra.2, gli elementi specifici del cambiamento più difficile. 3, in violazione del principio di inversione di dipendenza, si basano su una classe specifica che non si basa su un'astrazione.

scenari di utilizzo: 1, l'oggetto corrispondente alla struttura di classe oggetto cambia raramente, ma spesso la necessità di definire una nuova operazione su tale struttura oggetto.2, la necessità di una struttura di destinazione di oggetti in molte azioni diverse e non correlate, ma queste azioni devono evitare di "inquinamento" della classe di questi oggetti, non vogliamo modificare queste classi quando si aggiunge una nuova operazione.

Nota: I visitatori possono essere unificati funzione, si può fare un report, interfaccia utente, intercettare e filtrare.

realizzazione

Creeremo una definizione di interfaccia di funzionamentoComputerPartaccettabile.Tastiera,mouse, monitor ecomputerraggiungere l'interfacciaComputerPartclassi di entità. Definiamo un'altraComputerPartVisitor interfaccia,che definisce il tipo di operazione da visitatori.Computerutilizzare visitatori entità a prendere i provvedimenti opportuni.

VisitorPatternDemo,dimostriamo l'uso di Classecomputer,classeComputerPartVisitorper illustrare l'utilizzo del modello visitatore.

modello Visitor diagramma UML

fase 1

Definire un'interfaccia che rappresenta l'elemento.

ComputerPart.java

classe di interfaccia pubblica ComputerPart {
   public void accettare (ComputerPartVisitor computerPartVisitor);
}

fase 2

Creare estende le classi di entità sopra di classe.

Keyboard.java

public class tastiera implementa ComputerPart {

   @Override
   public void accettare (ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit (questo);
   }
}

Monitor.java

public class Monitor implementa ComputerPart {

   @Override
   public void accettare (ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit (questo);
   }
}

Mouse.java

public class mouse implementa ComputerPart {

   @Override
   public void accettare (ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit (questo);
   }
}

Computer.java

public class Computer implementa ComputerPart {
	
   ComputerPart [] di ricambio;

   pubblico Computer () {
      parti = new ComputerPart [] {nuovo mouse (), nuova tastiera (), il nuovo Monitor ()};		
   } 


   @Override
   public void accettare (ComputerPartVisitor computerPartVisitor) {
      for (int i = 0; i <parts.length; i ++) {
         parti [i] Accetti (computerPartVisitor);
      }
      computerPartVisitor.visit (questo);
   }
}

fase 3

Definire un'interfaccia di rappresentanza ospite.

ComputerPartVisitor.java

interfaccia pubblica ComputerPartVisitor {
	pubblico visita vuoto (Computer computer);
	visita public void (Mouse);
	visita public void (Keyboard tastiera);
	visita public void (monitor Monitor);
}

fase 4

Ospiti entità creati per ottenere la classe di cui sopra.

ComputerPartDisplayVisitor.java

public class ComputerPartDisplayVisitor implementa ComputerPartVisitor {

   @Override
   pubblico visita vuoto (Computer computer) {
      System.out.println ( "Visualizzazione del computer.");
   }

   @Override
   pubblico visita vuoto (Mouse) {
      System.out.println ( "Visualizzazione del mouse.");
   }

   @Override
   visita public void (Keyboard tastiera) {
      System.out.println ( "Visualizzazione della tastiera.");
   }

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

fase 5

UtilizzareComputerPartDisplayVisitorper mostrare una parte delcomputer.

VisitorPatternDemo.java

public class VisitorPatternDemo {
   Main (string [] args) {public static void

      ComputerPart del computer = nuovo computer ();
      computer.accept (nuova ComputerPartDisplayVisitor ());
   }
}

passo 6

Verifica uscita.

Visualizzazione del mouse.
Visualizzazione della tastiera.
Visualizzazione Monitor.
Visualizzazione del computer.