用途
- 访问者类改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。
要素
- Visitor:访问者接口,为每一个ConcreteElement声明VisitConcreteElement方法。
- ConcreteVisitor:具体访问者,定义Visit方法的实体。
- Element:元素类接口,声明一个Accept方法,以Visitor作为参数
- ConcreteElement:
- 具体元素类,定义Accept方法的实体
- 在Accept方法中调用Visitor的VisitConcreteElement方法,将自身this作为参数传入VisitConcreteElement方法。
- ObjectStructure:维护一个元素的集合。
- 示例图:

优缺点
- 扩展性好,仅需增加一个访问者即可在所有元素类上新增一个新操作。
- 增加新的具体元素类很困难。
