Applebet Android Dev Engineer

行为模式


@author javakam

访问者模式

访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。

访问者模式结构 UML

访问者和双分派

示例代码

Java 程序库代码中该模式的一些示例

看下 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等。

模板方法模式

当你只希望客户端扩展某个特定算法步骤, 而不是整个算法或其结构时, 可使用模板方法模式。

Java 程序库中模版方法的示例

识别方式 模版方法可以通过行为方法来识别 该方法已有一个在基类中定义的 默认 行为


参考:

  1. Refactoring.Guru
  2. 《Android源码设计模式解析与实战》
  3. 掘金 👉 https://juejin.im/post/5ebe33335188256d5952500c & https://juejin.im/post/5ec1dee45188256d877dc710

评论