设计模式——访问者模式

167 阅读1分钟

一.定义

    封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素新的操作。

二.类图

image.png

  • Visitor抽象访问者。抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法的参数定义哪些对象是可以被访问的。
  • ConcreteVisitor具体访问者。定义访问者的访问逻辑。
  • Element抽象元素。接口或者抽象类,声明接收哪一类访问者访问,程序上是通过accept方法中的参数来定义的。
  • ConcreteElement具体元素。
  • ObjectStruture结构对象。元素产生者,一般容纳在多个不同类,不同接口的容器。在项目中,一般很少抽象出这个角色。

三.优点

  • 符合单一职责原则。具体元素角色负责数据的加载,Visitor类负责报表的展现,两个不同的职责非常明确地分离开来,各自演绎变化。
  • 优秀的扩展性。
  • 灵活性非常高。

四.缺点

  • 具体元素对访问者公布细节。
  • 具体元素变更比较困难。
  • 违背了依赖倒置原则。

五.使用场景

    访问者模式是迭代器模式的扩充,业务规则要求遍历多个不同的对象,针对访问对象的不同,执行不同的操作。访问者还有一个用途,就是充当拦截器角色。