20190124——战神 Java访问者模式

在访问者模式,使用访问者类来改变元素类的执行算法。通过这种方式,元素的执行算法可以随访问者变化而变化,此模式属于行为模式类型,根据每个模式,元素对象必须接受访问对象,以便访问者对象处理元素对象的操作。

实现实例
在这个实现的实例中,将创建一个叫做ComputerPart的接口,并定义操作。Keyboard,Mouse,Monitor和Computer是实现ComputerPart接口的具体类,还将定义另一接口ComputerPartVisitor,它将定义一个访问类操作,Computer使用具体的访客做相应的动作。
VisitorPatternDemo这是一个演示类,将使用Computer和ComputerPartVisitor类,来演示访问者模式的使用。

20190124——战神 Java访问者模式_第1张图片

20190124——战神 Java访问者模式_第2张图片

第一步

package 访问者模式;

public interface ComputerPart {
    public void accept(ComputerPartVisitor computerPartVisitor);
}

第二步

package 访问者模式;

public class Keyboard implements ComputerPart{
    @Override
    public void accept(ComputerPartVisitor computerPartVisitor) {
        computerPartVisitor.visit(this);
    }
}

package 访问者模式;

public class Monitor implements ComputerPart {
    @Override
    public void accept(ComputerPartVisitor computerPartVisitor) {
        computerPartVisitor.visit(this);
    }
}

package 访问者模式;

public class Mouse implements ComputerPart{
    @Override
    public void accept(ComputerPartVisitor computerPartVisitor) {
        computerPartVisitor.visit(this);
    }
}

package 访问者模式;

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

第三步

package 访问者模式;

public interface ComputerPartVisitor {
    public void visit(Computer computer);
    public void visit(Mouse mouse);
    public void visit(Keyboard keyboard);
    public void visit(Monitor monitor);
}

第四步

package 访问者模式;

public class ComputerPartDisplayVisitor implements ComputerPartVisitor{
    @Override
    public void visit(Mouse mouse) {
        System.out.println("Displaying Mouse.");
    }

    @Override
    public void visit(Monitor monitor) {
        System.out.println("Displaying Monitor");
    }

    @Override
    public void visit(Computer computer) {
        System.out.println("Displaying Computer");
    }

    @Override
    public void visit(Keyboard keyboard) {
        System.out.println("Displaying Keyboard");
    }
}

第五步

package 访问者模式;

public class VisitorPatternDemo {
    public static void main(String[] args) {
        ComputerPart computer =new Computer();
        computer.accept(new ComputerPartDisplayVisitor());
    }
}

你可能感兴趣的:(20190124——战神 Java访问者模式)