今天的博客主题
设计模式 ——》 设计模式之代理模式
代理模式 PP (Proxy Pattern)
定义
代理模式是为其他对象提供一种代理,以便控制对这个对象的访问
在一些特殊情况下,一个对象不适合或者不能直接引用另一个对象,代理对象就可以在客户端与目标对象之间起到中介的作用。
应用场景
生活中的租房中介,婚介,黄牛,事物代理,非侵入式的日志监听等都是代理模式的体现。
当无法或者不想直接引用某个对象或访问某个对象存在困难时,可以使用代理对象来间接访问。
使用代理模式主要有两个目的:1保护目标对象,2增强目标对象。
优点
1)将代理对象与目标对象分离
2)在一定的程度上降低系统耦合性,扩展性好。
3)起到保护目标对象的作用
4)增强目标对象的功能
5)
缺点
1)造成系统在设计中类的数量增加。
2)在客户端与目标对象见增加一层代理对象,请求处理速度可能变慢
3)增加系统的复杂度
4)
源码中的应用
代理模式在源码中使用最典型的就是 SpringAop 的动态代理实现。
类图
AopProxy:为已配置的AOP代理委托接口,允许创建实际的代理对象。
对于JDK动态代理和CGLIB代理,可以使用现成的实现,如DefaultAopProxyFactory所应用的。
AopProxyFactory:接口将由能够基于 AdvisedSupport 配置对象创建AOP代理的工厂实现。
代理应遵守以下条件:
1)实现配置指示应该代理的所有接口。
2)实现建议的接口。
3)实现equals方法来比较代理接口、建议和目标。
4)如果所有访问和目标都是可序列化的,则它们应该是可序列化的。
5)如果访问和目标是线程安全的,则它们应该是线程安全的。
代理可能允许也可能不允许更改通知。如果代理不允许更改建议(例如,因为配置已冻结),则代理应在尝试更改建议时抛出AopConfigException。
DefaultAopProxyFactory:默认的AopProxyFactory实现,创建CGLIB代理或JDK动态代理。
如果给定的AdvisedSupport实例满足以下条件之一,则创建CGLIB代理:
1)配置优化标记
2)配置 proxyTargetClass 属性
3)未指定代理接口(S