bacor

个人站

Coding is important, so is writing


访问者模式

定义

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

通用类图如下:

类图中有3种角色:
Visitor访问者里定义它可以访问那些元素,具体就是visit方法的参数来确定;
Element元素角色定义接受哪一类访问者访问,具体通过accept方法参数定义,方法体里通常是visitor.visit(this)写法;
ObjectStruture元素产生者,一般容纳在多个不同类/接口的容器中。

优点

  • 符合单一职责
  • 拓展性强
  • 灵活性高

缺点

  • 具体元素对访问者公布细节
  • 具体元素变更困难
  • 违背依赖倒置原则

使用场景

当业务规则要求遍历多个不同对象时,可以考虑使用访问者模式。从这个角度看,访问者模式算是迭代器模式的扩展。另外,访问者模式也能充当拦截器(interceptor)的角色。

扩展

  1. 统计功能
  2. 多个访问者
  3. 双分派

参考:

设计模式之禅