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.