[周五派] 行为模式-访问者设计模式
访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。
访问者模式结构 UML
访问者和双分派
示例代码
Java 程序库代码中该模式的一些示例:
-
javax.lang.model.element.AnnotationValue和AnnotationValueVisitor -
javax.lang.model.element.Element和ElementVisitor -
javax.lang.model.type.TypeMirror和TypeVisitor -
java.nio.file.FileVisitor和SimpleFileVisitor -
javax.faces.component.visit.VisitContext和VisitCallback
看下
ElementVisitor的源码:
public interface ElementVisitor<R, P> {
//访问元素
R visit(Element var1, P var2);
default R visit(Element e) {
return this.visit(e, (Object)null);
}
//访问包元素
R visitPackage(PackageElement var1, P var2);
//访问一个类型元素
R visitType(TypeElement var1, P var2);
//访问一个变量类型
R visitVariable(VariableElement var1, P var2);
//访问一个可执行的元素
R visitExecutable(ExecutableElement var1, P var2);
//访问一个参数元素
R visitTypeParameter(TypeParameterElement var1, P var2);
//处理未知的元素类型 , Java 为后续扩展预留的接口
//例如后续元素类型增加了, 那么通过这个接口就可以处理上述没有声明的类型
R visitUnknown(Element var1, P var2);
default R visitModule(ModuleElement e, P p) {
return this.visitUnknown(e, p);
}
}
Android 程序示例:
APT 中的 AbstractProcessor.process() , 而使用APT的框架有Butterknife,Retrofit,Dagger2等。
参考:
- Refactoring.Guru
- 《Android源码设计模式解析与实战》

浙公网安备 33010602011771号