实例
可以避免修改层次类,污染接口
类Electronic Tax中的accept方法
accept(TaxVisitor v)
v. visitElectronicTax()
}
如**何链接在一起**
类图
组件的解释
- 访问者类为每个Element子类准备了一个访问者方法
- 访问者类决定要访问哪个类
Visitor1, Visitor2
- 实现Visitor类的接口中所声明的所有操作
-
使用例子
何时使用
对象结构包含很多个子类,而这些类有不同的接口。你需要针对不同的类进行不同的操作
- 许多不同的且不相干的操作需要施加于对象结构,而你想要避免这些不同的操作污染这些类
对象结构类很少改变(例如税收的种类很少改变),但是你需要经常地在这些结构体上增加新的运算(税率可能经常改变)。
优点
Visitor使添加新操作(在Visitor中)变得容易
-
缺点
添加新的ConcreteElement类很困难
什么是访问者模式的重点**?**
- 回答:用于使得被访问者与访问者之间建立自动访问的accept方法是重点。该方法建立了两个层次类之间的关联。该方法使得自动访问成为可能。
- 注:另外,类objectStructure类对于批量访问很重要。另外使用此类,可以使得客户类包含较少的条件语句。能够有效地做到责任分离。