分享目前在项目中用过的一些设计模式(3) | 青训营

37 阅读2分钟

代理模式

代理模式实际上有多种方式都能达成效果

  • 动态代理
    • 特点
      • 目标对象不固定
      • 在应用程序执行时动态创建目标对象
      • 代理对象会增强目标对象的行为
    • 一个比较被Java程序员所熟知的应用就是AOP
    • AOP底层就是使用了动态代理的方式实现的对原来的方法的增强功能
    • 但是对于不同的情况下,实际使用的代理方式有所不同
      • 首先是JDK动态代理,它是基于接口实现的,在实际的代理过程中,基于接口生成自定义的实现类,用于在需要增强的方法前后实现自定义的效果
      • 然后是CGLib动态代理,它则是基于实现的,对于需要实现增强效果的类,CGLib针对该类生成对应的子类,也就是生成一个类去继承需要实现增强效果的类,然后在生成的类中实现自定义的增强效果,这样的话,也能够和JDK动态代理的效果一致
  • 静态代理
    • 特点
      • 目标角色固定
      • 在应用程序执行前就得到目标角色
      • 代理对象会增强目标对象的行为
    • 实际上静态代理有点像静态工厂模式,对于特定的条件,只不过是生成对应的代理对象,而不是说生成对应的策略类型
  • 总体上,在实际的代码开发过程中,这两种方式都会被经常使用。当然,也是基于不同的场景需求来的,而不是说乱用的
  • 但是个人认为在静态代理模式的策略被使用时,能够满足要求的话,尽量不要使用动态代理模式,不有点杀鸡用牛刀的感觉