代理模式
模式定义
代理模式是为目标对象创建代理对象以提供一种代理机制,让代理对象能控制目标对象的访问,并且可以在不改变目标对象的情况下为目标对象添加额外的功能
模式分类
静态代理
在程序编译期静态地为目标类创建代理类
动态代理
在程序运行期运用反射机制动态地为目标类创建代理类(Spring AOP 采用动态代理)
UML 类图
优缺点
优点
- 代理模式在客户对象和目标对象之间起到一个中介作用和保护目标对象的作用
- 代理对象可以扩展目标对象的功能
- 代理模式能将客户对象与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性
缺点
- 代理模式会造成系统设计中的类数量增加
- 在客户对象和目标对象之间增加一个代理对象,会造成请求处理速度变慢
- 在一定程度增加了系统的复杂度
使用场景
远程代理
为一个位于不同网络计算机的对象提供一个本地的代理(如本地网盘)
虚拟代理
如果需要创建一个消耗较大的对象,先创建一个消耗较小的对象来表示,真实对象只在需要时才被真实创建(如图片显示)
安全代理
用来控制不同种类客户对真实对象的访问权限
智能指引
主要用于调用目标对象时,代理附加一些额外的处理功能(如GC垃圾回收)
延迟加载
为了提高系统的性能,延迟对目标对象的加载(如MyBatis 的延时加载)