定义
访问者模式用于封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
类图
代码
public class VisitorPattern {
public static void main(String[] args) {
EggRobot eggRobot= new EggRobot();
eggRobot.calc();
Visitor update = new UpdateVisitor();
eggRobot.accept(update);
eggRobot.calc();
}
}
class EggRobot{
private HardDisk disk;
private CPU cpu;
public EggRobot(){
disk= new HardDisk("记住1+1=1");
cpu = new CPU("1+1=1");
}
public void calc(){
cpu.run();
disk.run();
}
public void accept(Visitor visitor){
cpu.accept(visitor);
disk.accept(visitor);
}
}
abstract class Hardware{
String command;
public Hardware(String command){
this.command=command;
}
public void run(){
System.out.println(command);
}
public abstract void accept(Visitor visitor);
}
class CPU extends Hardware{
public CPU(String command){
super(command);
}
@Override
public void accept(Visitor visitor) {
visitor.visitCPU(this);
}
}
class HardDisk extends Hardware{
public HardDisk(String command){
super(command);
}
@Override
public void accept(Visitor visitor) {
visitor.visitDisk(this);
}
}
interface Visitor{
void visitCPU(CPU cpu);
void visitDisk(HardDisk disk);
}
class UpdateVisitor implements Visitor{
@Override
public void visitCPU(CPU cpu) {
cpu.command+=" 1+1=2";
}
@Override
public void visitDisk(HardDisk disk) {
disk.command+=" 记住:1+1=2";
}
}