场景安装包升级
访问者定义
UML
代码描述
public class Demo08 {
public static void main(String[] args) {
EggRobot egg = new EggRobot();
egg.calc();
UpdateVisitor updatePkg = new UpdateVisitor();
egg.accept(updatePkg);
egg.calc();
}
}
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;";
}
}
class EggRobot {
private CPU cpu;
private HardDisk disk;
public EggRobot() {
cpu = new CPU("1+1=1");
disk = new HardDisk("记住: 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);
}
}