定义
封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作
通用类图如下:

类图中有3种角色:
Visitor访问者里定义它可以访问那些元素,具体就是visit方法的参数来确定;
Element元素角色定义接受哪一类访问者访问,具体通过accept方法参数定义,方法体里通常是visitor.visit(this)写法;
ObjectStruture元素产生者,一般容纳在多个不同类/接口的容器中。
优点
- 符合单一职责
- 拓展性强
- 灵活性高
缺点
- 具体元素对访问者公布细节
- 具体元素变更困难
- 违背依赖倒置原则
使用场景
当业务规则要求遍历多个不同对象时,可以考虑使用访问者模式。从这个角度看,访问者模式算是迭代器模式的扩展。另外,访问者模式也能充当拦截器(interceptor)的角色。
扩展
- 统计功能
- 多个访问者
- 双分派
参考:
设计模式之禅