2023-02-22
原文作者:键盘林 原文地址:https://blog.csdn.net/qq_37909508/category_8976362.html

访问者模式

定义:

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

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

类型:行为型

适用场景:

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

数据结构与数据操作分离

优点:

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

缺点:

增加新的数据结构困难

具体元素变更比较麻烦

相关设计模式:

访问者模式和迭代器模式

Coding:

创建Course类

202302222111063401.png

创建FreeCourse类继承Course

202302222111074682.png

创建CodingCourse类继承Course

202302222111084363.png

创建IVisitor接口

202302222111098884.png

创建Visitor类实现IVisitor接口

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

202302222111110185.png

查看当前UML类图

202302222111128546.png

创建Test类

202302222111138407.png

运行结果

202302222111155088.png

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

202302222111166999.png

2023022221111864110.png

JDK中的应用:

类FileVisitor

2023022221112000911.png

类SimpleFileVisitor

2023022221112198512.png

在Spring中的应用

类BeanDefinitionVisitor

2023022221112368613.png

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

2023022221112564214.png

2023022221112780015.png

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

2023022221112948716.png

阅读全文