实例

可以避免修改层次类,污染接口
image.png
类Electronic Tax中的accept方法
accept(TaxVisitor v)
v. visitElectronicTax()
}
如**何链接在一起
image.png**

类图

image.png
image.png
组件的解释

  • 访问者类为每个Element子类准备了一个访问者方法
  • 访问者类决定要访问哪个类

Visitor1, Visitor2

  • 实现Visitor类的接口中所声明的所有操作
  • 提供算法环境、存储局部状态、积累遍历结构体的结果

    使用例子

    image.png

    何时使用

  • 对象结构包含很多个子类,而这些类有不同的接口。你需要针对不同的类进行不同的操作

  • 许多不同的且不相干的操作需要施加于对象结构,而你想要避免这些不同的操作污染这些类
  • 对象结构类很少改变(例如税收的种类很少改变),但是你需要经常地在这些结构体上增加新的运算(税率可能经常改变)。

    优点

  • Visitor使添加新操作(在Visitor中)变得容易

  • 访问者收集相关操作并分离无关操作

    缺点

  • 添加新的ConcreteElement类很困难

什么是访问者模式的重点**?**

  • 回答:用于使得被访问者与访问者之间建立自动访问的accept方法是重点。该方法建立了两个层次类之间的关联。该方法使得自动访问成为可能。
  • :另外,类objectStructure类对于批量访问很重要。另外使用此类,可以使得客户类包含较少的条件语句。能够有效地做到责任分离。