访问者模式-Visitor Pattern

作者写的太好了,设计模式通俗易懂。https://www.jianshu.com/p/cd17bae4e949

1.访问者模式简介

访问者模式(Visitor Pattern)模式是行为型(Behavioral)设计模式,提供一个作用于某种对象结构上的各元素的操作方式,可以使我们在不改变元素结构的前提下,定义作用于元素的新操作。
换言之,如果系统的数据结构是比较稳定的,但其操作(算法)是易于变化的,那么使用访问者模式是个不错的选择;如果数据结构是易于变化的,则不适合使用访问者模式。
访问者模式一共有五种角色:
(1) Vistor(抽象访问者):为该对象结构中具体元素角色声明一个访问操作接口。
(2) ConcreteVisitor(具体访问者):每个具体访问者都实现了Vistor中定义的操作。
(3) Element(抽象元素):定义了一个accept操作,以Visitor作为参数。
(4) ConcreteElement(具体元素):实现了Element中的accept()方法,调用Vistor的访问方法以便完成对一个元素的操作。
(5) ObjectStructure(对象结构):可以是组合模式,也可以是集合;能够枚举它包含的元素;提供一个接口,允许Vistor访问它的元素。

访问者模式类图如下:


访问者模式-Visitor Pattern_第1张图片

2. 访问者模式举例

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


访问者模式-Visitor Pattern_第2张图片

举例的类图如下:


访问者模式-Visitor Pattern_第3张图片

3.代码:

https://github.com/xy2953396112/JavaPractice/tree/master/src/main/java/DesignPattern/Visitor

4.总结

如果一个对象结构比较复杂,同时结构稳定不易变化,但却需要经常在此结构上定义新的操作,那就非常合适使用访问者模式,比如复杂的集合对象、XML文档解析、编译器的设计等。

访问者模式使我们更加容易的增加访问操作,但增加元素比较困难,需要我们修改抽象访问类和所有的具体访问类。

你可能感兴趣的:(访问者模式-Visitor Pattern)