访问者模式
定义
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。
类图
Visitor
负责对数据结构中每个具体的元素声明一个用于访问XXX的visit(XXX)方法。visit(XXX)是用于处理XXX的方法,负责实现该方法的是ConcreteVisitor。
ConcreteVisitor
负责实现Visitor所定义的接口。它要实现所有的visit(XXX)方法,即实现如何处理每个ConcreteElement
Element(元素)
表示Visitor角色的访问对象。它声明了接受访问者的accept方法。accept方法接收到的参数是Visitor。
ObjectStructure
负责处理Element的集合。ConcreteVisitor为每个Element都准备了处理方法。
示例
类图
Directory
1 | public class Directory extends Entry { |
Element
1 | public interface Element { |
Entry
1 | public abstract class Entry implements Element { |
File
1 | public class File extends Entry { |
FileTreatmentException
1 | public class FileTreatmentException extends RuntimeException { |
ListVisitor
1 | public class ListVisitor extends Visitor { |
Visitor
1 | public abstract class Visitor { |
Main
1 | public class Main { |
总结
Visitor模式的目的是将处理从数据结构中分离出来。