美文网首页
设计模式之代理模式

设计模式之代理模式

作者: 官先生Y | 来源:发表于2018-12-24 10:40 被阅读0次

    设计模式之代理模式

    10分钟看懂动态代理设计模式(升级篇)-对这篇动态代理模式的思路整理

    仿JDK实现动态代理逻辑

    通过一步步实现一个简易的仿JDK实现动态代理逻辑

    第1步:通过动态代理方式模拟实现静态代理效果
    1. 通过JavaPoet生成静态代理类TimeProxy源代码
    2. 通过JDK编译TimeProxy源代码
    3. 通过类加载器把TimeProxy字节码文件转换为内存中TimeProxy字节码对象
    4. 通过反射机制把创建代理对象

    通过第1步实现了:

    • 不再需要手动创建TimeProxy类java代码(站在迈向一个完整的动态代理的角度)
    • 可以代理任意实现了Flyable接口的类对象,并获取接口方法的执行时间

    产生的问题:

    • 只是针对实现了Flyable接口的类对象,并不是任意对象
    第2步:接口类型作为参数传入,而不是写死

    通过第2步实现了:

    • 可以针对实现传入接口的任意对象

    产生的问题:

    • 只能代理特定的功能,缺少灵活性,在这里是只能用于获取方法的执行时间
    • 如果要增加其它代理功能,例如在委托方法执行前后打印日志则需要重新创建一个代理类,显然这是不妥的
    第3步:新增InvocationHandler接口,用于处理自定义逻辑

    开发者需要对代理类进行自定义处理时,只要实现该接口,并在invoke方法中进行相应的处理即可

    第4步:修改生成代理对象代码

    为此,我们需要在原Proxy.newProxyInstance()方法中做如下改动:

    • 在newProxyInstance方法中传入InvocationHandler
    • 在生成的代理类中增加成员变量handler
    • 在生成的代理类方法中,调用invoke方法

    总结

    • Proxy->newProxyInstance用于生成代理对象
    • InvocationHandler:这个接口主要用于自定义代理逻辑处理
    • 为了完成对被代理对象的方法拦截,我们需要在InvocationHandler对象中传入被代理对象实例。

    相关文章

      网友评论

          本文标题:设计模式之代理模式

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