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