代理模式能将代理对象与真实被调用的目标对象分离
一定程度上降低了系统的耦合度,扩展性好
保护目标对象
增加目标对象
代理模式的缺点:
代理模式会造成 系统设计中类的数目增加
开客户端和目标对象增加一个代理对象,会造成请求处理速度会变慢
代理模式的种类:
- 静态代理
- 动态代理(jdk只能代理接口)
- CGLIB代理(不要使用 final)
Spring 的代理是 ,当Bean有实现接口时,Spring 使用 jdk的动态代理
当bean没有实现接口时,spring 使用 cglib
可以强制使用 cglib
<aop:aspectj-autoproxy proxy-target-class="true"/>
jdk 的动态代理速度会 比 cglib速度要快
和动态代理有点相似的设计模式: 装饰者模式、适配器模式
装饰者主要体现在给对象添加行为
而 代理主要是体现在控制 访问,通过设置代理源 加强目标对象
适配器模式: 考虑对象和改变对象的接口
使用Proxy角色,使得耗时处理(生成实例)推迟。
在大型系统的初始化过程中,存在大量耗时处理,如果初始化暂时不会使用的功能,会使启动时间延长,所以使用代理模式,先初始化需要使用的功能
当遇到代理人不会解决的问题时,还是会"转交"给本人——"委托"(现实世界中是本人委托给代理人,在设计模式中却相反)
https://www.cnblogs.com/ealenxie/p/9896269.html
静态代理和 装饰器模式真的很像
但是他们的侧重点又不一样,所以设计模式本身就是一种思想表达的形式
因为看问题的角度不同,那么对这个问题的解释也不一样
所以设计模式很多时候是有交叉甚至重合的
也许我只是为了达到某种目的而采用一种设计模式,但是可能不知不觉就加进来其他的设计模式