Java设计模式--访问者模式

2018-05-12  本文已影响0人  留给时光吧

这种模式主要是为了实现下面一种功能:类的执行可以随着访问者改变而改变。简单实现:

元素类接口,也就是被访问者

interface Element {
    void accept(Visitor visitor);
}

具体元素

public class ElementA implements Element{
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }

    public String actionA1() {
        return "actionA1";
    }

    public String actionA2() {
        return "actionA2";
    }
}

public class ElementB implements Element{
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }

    public String actionB1() {
        return "actionB1";
    }

    public String actionB2() {
        return "actionB2";
    }
}

访问者接口

interface Visitor {
    void visit(ElementA e);
    void visit(ElementB e);
}

具体访问者

public class Visitor1 implements Visitor {
    @Override
    public void visit(ElementA e) {
        System.out.println(e.actionA1());
    }

    @Override
    public void visit(ElementB e) {
        System.out.println(e.actionB1());
    }
}

public class Visitor2 implements Visitor {
    @Override
    public void visit(ElementA e) {
        System.out.println(e.actionA2());
    }

    @Override
    public void visit(ElementB e) {
        System.out.println(e.actionB2());
    }
}

结构类,类似于管理者

public class Structure {
    private ArrayList<Element> elementList = new ArrayList<>();

    public void action(Visitor visitor) {
        for (Element e : elementList) {
            e.accept(visitor);
        }
    }

    public void add(Element e) {
        elementList.add(e);
    }
}

测试类·

    public static void main(String[] args) {
        Structure structure = new Structure();
        structure.add(new ElementA());
        structure.add(new ElementB());

        Visitor1 visitor1 = new Visitor1();
        structure.action(visitor1);

        Visitor2 visitor2 = new Visitor2();
        structure.action(visitor2);
    }
上一篇 下一篇

猜你喜欢

热点阅读