用途

  • 访问者类改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。

要素

  • Visitor:访问者接口,为每一个ConcreteElement声明VisitConcreteElement方法。
  • ConcreteVisitor:具体访问者,定义Visit方法的实体。
  • Element:元素类接口,声明一个Accept方法,以Visitor作为参数
  • ConcreteElement:
    • 具体元素类,定义Accept方法的实体
    • 在Accept方法中调用Visitor的VisitConcreteElement方法,将自身this作为参数传入VisitConcreteElement方法。
  • ObjectStructure:维护一个元素的集合。
  • 示例图:

Xnip2019-09-12_07-54-49.jpg

优缺点

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