美文网首页
代理模式续集

代理模式续集

作者: jkwen | 来源:发表于2021-03-20 13:39 被阅读0次

动态代理

讲代理模式不讲动态代理简直是耍流氓。相比 必知必会的设计模式8 里提到的实现方式,这种实现的特点在于只有在代码运行时才知道为谁做代理,这种实现涉及到反射技术,代码阅读起来没那么直观。不过虽说实现起来和之前的方式相差较大,设计结构上实际没什么改变大的改变。

不过在实现上,Java 提供了现成的一套工具,InvocationHandler 用于动态代理类的实现接口,也就是说实现这个接口的类就被看做是动态代理类。那普通类还是普通类,需要实现功能接口。InvocationHandler 接口里只有一个方法 invoke,简单理解就是通过这个方法能最终控制普通类对象的方法调用。

另外我们还需要一个 Proxy 类,这个也是 Java 提供的,它通过 newProxyInstance 方法可以创建一个代理类实例(但其实就是功能接口类型实例),所以如果要使用动态代理,写法也比较固定,

//IFunction 表示功能接口
//这里用了匿名内部类来实现了 InvocationHandler 的 invoke 方法
//当然也可以定义一个类来实现 InvocationHandler 接口,再传入类对象
IFunction ifun = (IFunction) Proxy.newProxyInstance(IFunction.class.getClassLoader(), new Class<?>[]{IFunction.class}, new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //这里是默认的实现,如果要结合业务逻辑,要再改动改动
                //例如可以看看 Retrofit 类的代码,它里面就用到了动态代理
                return method.invoke(this, args);
            }
        });

可见动态代理我们省去的其实是代理类的实现。那动态代理有什么用途呢?最典型的,在 Android 中也是可实践的就是 AOP(面向切面编程,这是一个概念,就像面向对象编程),通过切面方式可以实现在想要的地方增加逻辑处理,而尽可能不去改动原有逻辑。我尝试过在项目里用 AOP 的 AspectJ(这个是具体的实现技术) 来实现权限的动态申请,不得不说确实方便很多。

与策略模式的对比

了解了代理模式,再回头来看下 策略模式 发现有相似点,假如我们让 Context 上下文类也实现策略接口,那这不就是代理模式么。可见模式间的转换就在某个小细节上,模式与模式间也是有一定的联系的。

参考内容

「设计模式之禅(第 2 版)」
「Android 源码设计模式解析与实战」

相关文章

  • 代理模式续集

    动态代理 讲代理模式不讲动态代理简直是耍流氓。相比 必知必会的设计模式8[https://www.jianshu....

  • 设计模式

    单例模式 模板方法模式 工厂模式 代理模式 静态代理 JDK动态代理

  • 设计模式

    单例模式 代理模式 静态代理 jdk动态代理 cglib动态代理 工厂模式 适配器模式 建造者模式 观察者模式

  • kube-proxy的3种模式

    userspace代理模式 iptables代理模式 IPVS代理模式 https://kubernetes.io...

  • 第4章 结构型模式-代理模式

    一、代理模式简介 二、代理模式3个角色 三、代理模式的优点 四、代理模式的实例(游戏代练)

  • 理解代理模式

    原创博客地址 简介 代理模式,也叫做委托模式,分为:静态代理动态代理 代理模式也是平时比较常用的设计模式之一,代理...

  • 结构型 代理模式(文末有项目连接)

    1:什么是代理模式 2:没用代理模式时的实例 3:使用代理模式将其解耦(静态代理) 3:使用代理模式将其解耦(动态...

  • 设计模式-动态代理模式

    之前介绍了代理模式,大家也都了解了代理模式,不过之前介绍的代理模式是静态代理,静态代理什么意思?静态代理指的是代理...

  • 代理模式

    一、什么是代理模式 代理模式(Proxy pattern):代理模式又叫委托模式,是为某个对象提供一个代理对象,并...

  • 设计模式之代理模式(Proxy模式)

    代理模式的引入 代理模式的实例程序 代理模式的分析 代理模式的引入 Proxy是代理人的意思,指的是代替别人进行工...

网友评论

      本文标题:代理模式续集

      本文链接:https://www.haomeiwen.com/subject/ihficltx.html