在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。
创建元素对象:
public interface ComputerPart {
public void accept(ComputerPartVisitor computerPartVisitor);
}
元素实体类
public class Keyboard implements ComputerPart {
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
public class Monitor implements ComputerPart {
@Override
public void accept(ComputerPartVisitor computerPartVisitor) {
computerPartVisitor.visit(this);
}
}
import java.util.ArrayList;
import java.util.List;
public class Computer {
List<ComputerPart> computerParts = new ArrayList<>();
public Computer(){
}
public void addPart(ComputerPart computerPart) {
computerParts.add(computerPart);
}
public void accept(ComputerPartVisitor computerPartVisitor) {
for (ComputerPart computerPart : computerParts) {
computerPart.accept(computerPartVisitor);
}
}
}
访问者的接口
public interface ComputerPartVisitor {
public void visit(Mouse mouse);
public void visit(Keyboard keyboard);
}
访问者实现
public class ComputerPartDisplayVisitor implements ComputerPartVisitor {
@Override
public void visit(Mouse mouse) {
System.out.println("Displaying Mouse.");
}
@Override
public void visit(Keyboard keyboard) {
System.out.println("Displaying Keyboard.");
}
}
Main
Computer computer = new Computer();
computer.addPart(new Keyboard());
computer.addPart(new Mouse());
computer.accept(new ComputerPartDisplayVisitor());
可以设置多个访问者。对mouse、keyboard作不同的操作。