访问者模式
简介
访问者模式(Visitor Pattern) 是一种行为型设计模式,允许在不修改对象结构的前提下,定义新操作作用于对象集合中的各个元素。它的核心思想是将算法与对象结构分离,通过“双分派”(Double Dispatch)机制实现动态 绑定。
关键角色:
- Visitor:定义访问具体元素的接口(如
VisitCircle,VisitRectangle) - ConcreteVisitor:实现具体的访问逻辑(如面积计算、序列化)
- Element:定义接受访问者的接口(
Accept(Visitor)) - ConcreteElement:具体元素实现
Accept方法
常见使用场景
- 复杂对象结构的统一处理
- 抽象语法树(AST)的遍历(编译器中的类型检查、代码优化)
- 文件系统目录树的统计/备份操作
- 动态扩展数据结构的操作
- 报表导出(支持 CSV/JSON/XML 多种格式)
- 游戏场景中不同物体的碰撞检测逻辑
- 避免污染对象模型
- 当对象结构稳定但需要频繁添加新操作时
优点
- 开闭原则:新增访问者无需修改现有代码
- 集中算法逻辑:相关操作聚合在同一个访问者中
- 跨对象层级操作:可处理异构对象集合(如不同图形类型)