Tasarım Modelleri - Ziyaretçi Deseni

Ziyaretçi modelinde, bir eleman sınıfının yürütme algoritmasını değiştiren bir ziyaretçi sınıfı kullanırız. Böylelikle elemanın yürütme algoritması ziyaretçi değiştikçe ve değiştikçe değişkenlik gösterebilir. Bu örüntü, davranış örüntüleri kategorisine girer. Modele göre, öğe nesnesinin ziyaretçi nesnesini kabul etmesi gerekir, böylece ziyaretçi nesnesi, öğe nesnesi üzerindeki işlemi gerçekleştirir.

Uygulama

Kabul etme işlemini tanımlayan bir ComputerPart arayüzü oluşturacağız . Klavye , Fare , Monitör ve Bilgisayar , ComputerPart arayüzünü uygulayan somut sınıflardır . Bir ziyaretçi sınıfı işlemlerini tanımlayacak başka bir arayüz ComputerPartVisitor tanımlayacağız. Bilgisayar , karşılık gelen eylemi yapmak için somut ziyaretçi kullanır.

Demo sınıfımız VisitorPatternDemo , ziyaretçi deseninin kullanımını göstermek için Computer ve ComputerPartVisitor sınıflarını kullanacaktır.

Aşama 1

Elemanı temsil edecek bir arayüz tanımlayın.

ComputerPart.java

public interface ComputerPart {
   public void accept(ComputerPartVisitor computerPartVisitor);
}

Adım 2

Yukarıdaki sınıfı genişleten somut sınıflar oluşturun.

Keyboard.java

public class Keyboard implements ComputerPart {

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

Monitor.java

public class Monitor implements ComputerPart {

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

Mouse.java

public class Mouse implements ComputerPart {

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

Computer.java

public class Computer implements ComputerPart {
	
   ComputerPart[] parts;

   public Computer(){
      parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()};		
   } 


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

Aşama 3

Ziyaretçiyi temsil edecek bir arayüz tanımlayın.

ComputerPartVisitor.java

public interface ComputerPartVisitor {
	public void visit(Computer computer);
	public void visit(Mouse mouse);
	public void visit(Keyboard keyboard);
	public void visit(Monitor monitor);
}

4. adım

Yukarıdaki sınıfı uygulayarak somut ziyaretçi oluşturun.

ComputerPartDisplayVisitor.java

public class ComputerPartDisplayVisitor implements ComputerPartVisitor {

   @Override
   public void visit(Computer computer) {
      System.out.println("Displaying Computer.");
   }

   @Override
   public void visit(Mouse mouse) {
      System.out.println("Displaying Mouse.");
   }

   @Override
   public void visit(Keyboard keyboard) {
      System.out.println("Displaying Keyboard.");
   }

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

Adım 5

Kullanım ComputerPartDisplayVisitor kısımlarını görüntülemek için Bilgisayar .

VisitorPatternDemo.java

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

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

6. Adım

Çıkışı doğrulayın.

Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.