目的 分离数据结构和数据操作,在不改变元素数据结构的情况下,进行添加元素操作
应用场景

(1)类的结构改变很少,但经常要增加新的基于该结构的操作

(2)需要对某一对象结构对象记进行

构成 抽象访问者、具体访问者、抽象元素、具体元素、对象结构
备注 小说中的人物角色,不同读者评价不同;超市商品,顾客关注价格、性能,而超市老板关注利润、数量。上述被处理的元素结构相对稳定,如果使用访问者模式,则可以分离数据处理和数据结构,可以增加处理方法而不用修改原有数据结构、程序代码

 

 

 

 

 

 

访问者模式由访问者、具体访问者、抽象元素、具体元素、对象结构等角色组成。

(1)抽象访问者:定义访问具体元素的接口,为每一个具体元素类成名一个Vist操作,该操作的参数类型标识了被访问的具体元素。

(2)具体访问者:实现抽象访问者中声明的各个Visit操作。

(3)抽象元素:声明一个包含接受操作Accept()的接口,Accept()参数被接受访问者

(4)具体元素:实现一个访问者为参数的Accept操作

(5)对象结构:包含抽象元素的容器,提供让访问者对象遍历容器中所有元素的方法(List、Set、Map等)。