设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用

访问者模式

定义:

封装作用于某数据结构(如List/Set/Map等)中的各元素的操作

可以在不改变各元素的类的前提下,定义作用于这些元素的操作

类型:行为型

适用场景:

一个数据结构如(List.Set/Map等)包含很多类型对象

数据结构与数据操作分离

优点:

增加新的操作很容易,即增加一个新的访问者

缺点:

增加新的数据结构困难

具体元素变更比较麻烦

相关设计模式:

访问者模式和迭代器模式

Coding:

创建Course类

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第1张图片

创建FreeCourse类继承Course

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第2张图片 

创建CodingCourse类继承Course

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第3张图片 

创建IVisitor接口

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第4张图片 

创建Visitor类实现IVisitor接口

访问者模式的核心:就是通过不同的visitor来对相同的数据进行不同的处理。

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第5张图片 

查看当前UML类图

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第6张图片 

创建Test类

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第7张图片  

 运行结果

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第8张图片

 流程总结:在course.accept()中,传入的Visitor类其实都是一样的,主要是对于course它本身的一个判断this判断,然后在通过visit()方法来进行判断

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第9张图片

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第10张图片 

JDK中的应用:

类FileVisitor

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第11张图片 

类SimpleFileVisitor

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第12张图片 

 在Spring中的应用

 类BeanDefinitionVisitor

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第13张图片

 它的具体实现都交给了valueResolver来实现

设计模式深入浅出--24.访问者模式简单实例及其在JDK、Spring中的应用_第14张图片 

方法visitBeanDefinition实现了不同的visit来对相同的数据进行不同的处理

 

你可能感兴趣的:(Java设计模式)