一、概念:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
二、UML示意图
Visitor抽象类定义了访问每一个不同元素类型的接口,每一个具体访问者继承自这个抽象类并实现这些访问元素的方法。ConcreteElement继承自抽象Element类并实现Accept方法来执行ConcreteVisitor中对应自己元素类型的操作VisitConcreteElement方法。这其实是一种双访问的技术,ConcreteVisitor访问ConcreteElement,而ConcreteElement又根据自己的元素类型调用ConcreteVisitor中对应的VisitConcreteElement方法。而ObjectStructure类则持有一个Element列表,通过Attach和Detach方法新增和移除Element,并可以通过Accept方法传入一个Visitor而遍历这个Element列表使每一个Element对象访问这个Visitor。
在访问者模式中,数据结构一般是稳定的,也就是访问者Visitor中需要访问的ConcreteElement类是稳定的,否则当新增类型的时候,抽象Visitor要加一个访问新元素类型的接口并且每一个ConcreteVisitor都要新增一个新的访问这个新增元素类型的方法。这就违背了开闭原则,并且当ConcreteVisitor很多时修改量会很大。
三、优缺点
优点:
缺点:
原文:https://www.cnblogs.com/winsons/p/12548652.html