本文实例代码:https://github.com/JamesZBL/java_design_patterns
在访问者(Visitor)模式中,客户通过一个访问者类,将对于一个数据结构的不同元素的访问方法封装起来,这样,对一类元素的访问方法可以通过在访问者中修改逻辑而实现,这种类型的设计模式属于行为型模式。
如果对一个数据结构的访问欲获得的结果,需要该结构内部属性经过一系列计算才能得到,那么一般情况下,我们会将计算过程写到数据结构中,用一个统一的接口约束数据结构的计算方法,保证都能获得一致的结构。但是如果有新的计算功能需求,就要对数据结构类进行修改,显然,这不符合开闭原则。所以我们可以将对不同数据结构中的属性的计算方法抽象到一个访问者类中。这样,当需要修改算法的时候只需修改访问者中的具体逻辑就可以了,一定程度上将数据结构和算法分离开来了。