访问者模式
定义:
封装作用于某数据结构(如List/Set/Map等)中的各元素的操作
可以在不改变各元素的类的前提下,定义作用于这些元素的操作
类型:行为型
适用场景:
一个数据结构如(List.Set/Map等)包含很多类型对象
数据结构与数据操作分离
优点:
增加新的操作很容易,即增加一个新的访问者
缺点:
增加新的数据结构困难
具体元素变更比较麻烦
相关设计模式:
访问者模式和迭代器模式
Coding:
创建Course类
创建FreeCourse类继承Course
创建CodingCourse类继承Course
创建IVisitor接口
创建Visitor类实现IVisitor接口
访问者模式的核心:就是通过不同的visitor来对相同的数据进行不同的处理。
查看当前UML类图
创建Test类
运行结果
流程总结:在course.accept()中,传入的Visitor类其实都是一样的,主要是对于course它本身的一个判断this判断,然后在通过visit()方法来进行判断
JDK中的应用:
类FileVisitor
类SimpleFileVisitor
在Spring中的应用
类BeanDefinitionVisitor
它的具体实现都交给了valueResolver来实现
方法visitBeanDefinition实现了不同的visit来对相同的数据进行不同的处理