定义

表示一个作用于某对象结构中各个元素的操作。它使得用户可以在不改变各个元素的类的前提下定义作用于这些元素的新操作。(好抽象呀)

结构

  • 抽象元素:一个抽象类,该类定义了接收访问者的 accept 操作
  • 具体元素:抽象元素的子类
  • 抽象访问者:一个接口,该接口定义操作具体元素的方法。
  • 具体访问者:实现 抽象访问者 接口的类

自己的理解

  • 抽象访问者:定义了一个接口,这个接口定义了,具体的访问者的方法。比如要访问哪个类型的数据等等
    • image.png
    • 这里的抽象访问者定义了两个 visit 方法的重载,能够让具体访问者,去访问 Coder 和 Worker 类型
  • 具体访问者:实现上面的接口。对 visit 方法做出具体的动作。
    • image.png
  • 抽象元素:一个抽象类,定义了被访问类型的一些共有的特性和行为
    • image.png
  • 具体元素,能够被访问的元素,继承自抽象元素
    • image.png
    • image.png

uml 图

image.png

最终调用

image.png

双重分派

image.png

优点

image.png