访问者( Visitor )模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

适用性:

  • 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。
  • 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作污染这些对象的类。访问者使得你可以将相关的操作集中起来定义在一个类中。当该对象结构被很多应用共享时,用访问者模式让每个应用仅包含需要用到的操作。
  • 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。

所涉及的角色:

抽象访问者 (Abstract Visitor) 角色:声明一个或者多个访问操作,形成所有的具体角色所必须实现的接口。

具体访问者 (Concrete Visitor) 角色:实现抽象访问者所声明的接口。

抽象结点 (Abstract Node) 角色:声明一个接受操作,接受一个访问者对象作为一个参数。

具体结点 (Concrete Node) 角色:实现抽象元素所规定的的接受的操作。

结构对象( Object Structure )角色:遍历结构中的所有的元素。
visitor.bmp