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

设计模式之代理模式

作者: 官先生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对象中传入被代理对象实例。

相关文章

  • 设计模式之代理模式

    设计模式之代理模式 10分钟看懂动态代理设计模式(升级篇)-对这篇动态代理模式的思路整理 仿JDK实现动态代理逻辑...

  • 代理模式

    设计模式之代理模式 什么是代理模式? 指的事代理对象为其他对象提供代理以控制对被...

  • Java设计模式之代理模式

    Java设计模式之代理模式 代理模式 静态代理 动态代理 为什么需要代理 通过代理,我们能够不用知道委托人是谁,而...

  • Java代理模式之JDK动态代理

    了解什么是动态代理模式,可参考Java设计模式之代理模式 简介 JDK动态代理是java.lang.reflect...

  • 设计模式之代理模式2

    设计模式之代理模式运用 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对...

  • 设计模式之代理模式

    设计模式之代理模式 简介 代理模式是结构型设计模式。 当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过...

  • 设计模式之代理模式

    title: 设计模式之代理模式date: 2018-08-15 20:25:42tags: 设计模式 笔记 Ja...

  • java设计模式之代理模式(静态代理)

      今天给大家分享的是java设计模式之代理模式中的静态代理模式,动态代理模式将在后面文章中给出。如有不足,敬请指...

  • Android 代理模式

    Android 设计模式系列文章 Android 23种设计模式 前言 代理模式可能是我们平时开发中最常见的模式之...

  • 设计模式之代理模式

    设计模式之代理模式 1.代理模式的定义 为其他对象提供一种代理以控制对这个对象的访问. 2.代理模式的使用场景 当...

网友评论

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

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