JAVA设计模式笔记(访问者模式)

访问者模式,是行为型设计模式之一。访问者模式封装一些作用于某种数据结构各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素新的操作。访问者模式主要将数据操作和数据结构分离,解决数据结构和操作耦合性的问题。
访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口。

类图:
在这里插入图片描述
访问者模式的角色和职责:
(1)Visitor:接口或者抽象类,它定义了对每一个元素(Element)访问的行为,它的参数就是可以访问的元素,它的方法数理论上来讲与元素个数是一样的,因此,访问者模式要求元素的类族要稳定,如果经常添加、移除元素类,必然会导致频繁地修改Visitor接口,如果这样则不适合使用访问者模式。
(2)ConcreteVisitor:具体访问者,它需要给出对每一个元素类访问时所产生的具体行为。
(3)Element:元素接口或者抽象类,它定义了一个接受访问者的方法(Accept),其意义是指每一个元素都要可以被访问者访问。
(4)ConcreteElement:具体的元素类,它提供接受访问方法的具体实现,而这个具体的实现,通常情况下是使用访问者提供的访问该元素类的方法。
(5)ObjectStructure:对象结构是一个抽象表述,它内部管理了元素集合,并且可以迭代这些元素供访问者访问。

访问者

public abstract class Visitor {
    public abstract void visitElement1(Element1 element1);
    public abstract void visitElement2(Element2 element2);
}

具体访问者

public class Visitor1 extends Visitor {

    @Override
    public void visitElement1(Element1 element1) {
        System.out.println("访问元素1");
    }
    @Override
    public void visitElement2(Element2 element2) {
        System.out.println("访问元素2");
    }
}

元素类

public abstract class Element {
    abstract void accept(Visitor action);
}

具体元素类

public class Element1 extends Element {

    @Override
    void accept(Visitor visitor) {
        visitor.visitElement1(this);
    }
}
public class Element2 extends Element {
    @Override
    void accept(Visitor visitor) {
        visitor.visitElement2(this);
    }
}

数据结构类

public class ObjectStruct {
    private List<Element> elementList=new LinkedList<>();

    public void add(Element p){
        elementList.add(p);
    }
    public void delete(Element p){
        elementList.remove(p);
    }
    public void display(Visitor visitor){
        for(Element e:elementList){
            e.accept(visitor);
        }
    }
}

客户端调用

public class Client {
    public static void main(String[] args) {
        ObjectStruct objectStruct=new ObjectStruct();
        objectStruct.add(new Element1());
        objectStruct.add(new Element2());
        Visitor visitor=new Visitor1();
        objectStruct.display(visitor);
    }
}

已标记关键词 清除标记
相关推荐
<div> <span style="font-size:16px;"><span><span style="font-size:20px;color:#FF0000;"><strong><span>课程亮点:</span></strong></span></span></span> </div> <div style="font-size:16px;"> <span style="color:#424242;"><span style="background-color:#FFFAA5;">课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点</span></span> </div> <p style="font-size:16px;"> <span style="font-size:14px;"><span><span style="background-color:#FFFFFF;"><span style="color:#424242;"><br /></span></span></span></span> </p> <div> <div> <span style="font-size:16px;"><span><strong><span style="background-color:#FFFFFF;">课程内容:</span></strong></span></span> </div> <div> <ol><li> <span style="font-size:16px;color:#E53333;"><strong>工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式</strong></span> </li> <li> <span style="font-size:16px;color:#E53333;"><strong>策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式访问者模式</strong></span> </li> </ol></div> </div> <div style="font-size:16px;"> <span style="color:#FF0000;"><strong><span style="font-size:18px;">课程特色:</span></strong></span> </div> <div> <ol><li> 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 </li> <li> 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 </li> <li> 笔记以超链接形式让知识点关联起来,形式知识体系 </li> <li> 采用先概念后实例再应用方式,知识点深入浅出 </li> <li> <strong>提供授课内容笔记作为课后复习以及工作备查工具</strong> </li> </ol></div> <p> <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;">部分图表(电脑PC端查看:</span></strong></strong></span></span></span> </p> <p> <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/201905251242348850.png" alt="" /><img src="https://img-bss.csdn.net/201905251242404542.png" alt="" /><img src="https://img-bss.csdn.net/201905251242469204.png" alt="" /><img src="https://img-bss.csdn.net/201905251242514951.png" alt="" /><img src="https://img-bss.csdn.net/201905251243028561.png" alt="" /><br /></span></strong></strong></span></span></span> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页