跳到主要内容

访问者模式(Visitor)

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

类型: 行为型

类图:

image-20210530171517392

组件说明:

  • Visitor:为该对象结构中的ConcreteElement的每一个类声明一个visit操作
  • ConcreteVisitor:具体访问者,实现每个由Visiotr声明的操作。每个操作实现算法的一部分,而该算法片段乃是对应结构中对象的类
  • Element:定义一个Accept操作,它以一个访问者为参数
  • ConcreteElement:具体元素,实现accept操作
  • ObjectStructure:能枚举它的元素,可以提供一个高层的接口以允许访问者访问它的元素

适用场景:

  • 对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作

  • 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加新操

    作时修改这些类。

优点:

  • 符合单一职责原则
  • 优秀的扩展性
  • 灵活性

缺点:

  • 具体元素对访问者公布细节,违反了迪米特原则
  • 具体元素变更比较困难
  • 违反了依赖倒置原则,依赖了具体类,没有依赖抽象

**注意事项:**访问者可以对功能进行统一,可以做报表、UI、拦截器与过滤器