在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。

主要将数据结构与数据操作分离。稳定的数据结构和易变的操作耦合问题。结构图

设计模式行为型:访问者模式(VisitorPattern)_java

角色与理解

  • 访问者模式共分为五种角色:

    • Visitor(抽象访问者):内部声明一个对每一个具体元素进行访问的操作。

    • Concrete Visitor(具体访问者):继承抽象访问者,实现对所有具体元素的一种访问操作。

    • Element(抽象元素):声明accept()方法,以抽象访问者作为参数,供访问者访问。

    • Concrete Element(具体元素):实现accept()方法,调用访问者的访问方法以完成访问者对自身的访问。

    • Object Structure(对象结构):存储并管理元素,提供一个入口,使所有元素被访问。

  • 被访问者提供访问入口,使自身的数据被访问者访问。

核心代码

  • 抽象访问者

设计模式行为型:访问者模式(VisitorPattern)_java_02

  • 具体访问者

  • 抽象元素

设计模式行为型:访问者模式(VisitorPattern)_java_03

  • 具体元素

设计模式行为型:访问者模式(VisitorPattern)_java_04

  • 对象结构

设计模式行为型:访问者模式(VisitorPattern)_java_05

  • 客户端

设计模式行为型:访问者模式(VisitorPattern)_java_06