1.访问者模式简介

访问者模式(Visitor Pattern)模式是行为型(Behavioral)设计模式,提供一个作用于某种对象结构上的各元素操作方式,可以使我们在不改变元素结构的前提下,定义作用于元素的新操作。

换言之,如果系统的数据结构是比较稳定的,但其操作(算法)是易于变化的,那么使用访问者模式是个不错的选择;如果数据结构是易于变化的,则不适合使用访问者模式。

访问者模式一共有五种角色:
(1) Vistor(抽象访问者):为该对象结构中具体元素角色声明一个访问操作接口。
(2) ConcreteVisitor(具体访问者):每个具体访问者都实现了Vistor中定义的操作。
(3) Element(抽象元素):定义了一个accept操作,以Visitor作为参数。
(4) ConcreteElement(具体元素):实现了Element中的accept()方法,调用Vistor的访问方法以便完成对一个元素的操作。
(5) ObjectStructure(对象结构):可以是组合模式,也可以是集合;能够枚举它包含的元素;提供一个接口,允许Vistor访问它的元素。

访问者模式举例

如果老师教学反馈得分大于等于85分、学生成绩大于等于90分,则可以入选成绩优秀奖;如果老师论文数目大于8、学生论文数目大于2,则可以入选科研优秀奖。
在这个例子中,老师和学生就是Element,他们的数据结构稳定不变。从上面的描述中,我们发现,对数据结构的操作是多变的,一会儿评选成绩,一会儿评选科研,这样就适合使用访问者模式来分离数据结构和操作。

式来分离数据结构和操作。

序号 类名 角色 说明
1 Visitor Visitor 抽象访问者
2 GradeSelection ConcreteVisitor 具体访问者
3 ResearcherSelection ConcreteVisitor 具体访问者
4 Element Element 抽象元素
5 Teacher ConcreteElement 具体元素
6 Student ConcreteElement 具体元素
7 ObjectStructure ObjectStructure 对象结构
8 VisitorClient 客户端 演示调用

举例的类图如下:
访问者模式 - 图1

https://www.jianshu.com/p/cd17bae4e949