设计模式之访问者模式

Posted emoji-emoji

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之访问者模式相关的知识,希望对你有一定的参考价值。

访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

 

public interface Visitor {
    public void visitElementA(ConcreteElementA concreteElementA);

    public void visitElementB(ConcreteElementB concreteElementB);
}

 

public class ConcreteVisitorOne implements Visitor {
    @Override
    public void visitElementA(ConcreteElementA concreteElementA) {
        System.out.println(this.getClass().getSimpleName() + "访问" + concreteElementA.getClass().getSimpleName());
    }

    @Override
    public void visitElementB(ConcreteElementB concreteElementB) {
        System.out.println(this.getClass().getSimpleName() + "访问" + concreteElementB.getClass().getSimpleName());
    }
}

 

public class ConcreteVisitorTwo implements Visitor {
    @Override
    public void visitElementA(ConcreteElementA concreteElementA) {
        System.out.println(this.getClass().getSimpleName() + "访问" + concreteElementA.getClass().getSimpleName());
    }

    @Override
    public void visitElementB(ConcreteElementB concreteElementB) {
        System.out.println(this.getClass().getSimpleName() + "访问" + concreteElementB.getClass().getSimpleName());
    }
}

 

public interface Element{
    public void accept(Visitor visitor);
}

 

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

 

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

 

public class Component {
    private List<Element> list = new ArrayList<>();

    public void add(Element element) {
        list.add(element);
    }

    public void delete(Element element) {
        list.remove(element);
    }

    public void accept(Visitor visitor) {
        for (Element element : list) {
            element.accept(visitor);
        }
    }
}

 

public class VisitorDemo{
    public static void main(String[] args) {
        Component component = new Component();
        component.add(new ConcreteElementA());
        component.add(new ConcreteElementB());

        ConcreteVisitorOne visitorOne = new ConcreteVisitorOne();
        ConcreteVisitorTwo visitorTwo = new ConcreteVisitorTwo();

        component.accept(visitorOne);
        component.accept(visitorTwo);
    }
}

 

以上是关于设计模式之访问者模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之观察者模式与访问者模式详解和应用

PHP面向对象之访问者模式+组合模式

设计模式之单例模式

设计模式之访问者模式

JAVA SCRIPT设计模式--行为型--设计模式之Vistor访问者(23)

JAVA SCRIPT设计模式--行为型--设计模式之Vistor访问者(23)