312访问者模式

91 阅读1分钟

定义

访问者模式用于封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。

类图

图片1.png

代码

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";
    }
}