代理模式

Posted shijianchuzhenzhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理模式相关的知识,希望对你有一定的参考价值。

一.代理模式结构图

技术图片

 

 二.代理模式总结

定义

对不适合或者不能直接引用目标对象,代理对象作为客户端和目标对象之间的中介。

主要优点
1. 代理对象在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;
2. 代理对象可以扩展目标对象的功能;
3. 代理对象能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;

主要缺点
多加一个代理对象层,会造成请求处理速度变慢,增加了系统的复杂度;

模式角色
抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。

应用场景
远程代理,为了隐藏目标对象存在于不同地址空间的事实,方便客户端访问。例如,本地虚拟的硬盘,用户访问虚拟硬盘时实际访问的是网盘空间。
安全代理,用于控制不同种类客户对真实对象的访问权限。
虚拟代理,用于要创建的目标对象开销很大时。例如,下载一幅很大的图像需要很长时间,因某种计算比较复杂而短时间无法完成,这时可以先用小比例的虚拟代理替换真实的对象,消除用户对服务器慢的感觉。
智能指引,主要用于调用目标对象时,代理附加一些额外的处理功能。例如,增加计算真实对象的引用次数的功能,这样当该对象没有被引用时,就可以自动释放它。
延迟加载,指为了提高系统的性能,延迟对目标的加载。例如,Hibernate中就存在属性的延迟加载和关联表的延时加载。

三.代理模式应用实例

技术图片

 四. 代理模式扩展(动态代理)

代理模式中,代理类中包含了对真实主题的引用,这样存在两个缺点。
1. 设计代理以前真实主题必须事先存在,不太灵活。采用动态代理模式可以解决以上问题,如 SpringAOP,其结构图如图 4 所示
2. 真实主题与代理主题一一对应,增加真实主题也要增加代理。

技术图片

 

以上是关于代理模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式代理模式 ( 代理模式结构 | 客户端 | 主题对象 | 被代理对象 | 代理对象 )

代理的模式和原理(代理的模式有几种)

设计模式——代理模式

设计模式-代理模式

设计模式 结构型模式 -- 代理模式(动态代理(CGLIB动态代理)三种代理的对比(静态代理动态代理(JDK代理和CGLIB代理)优缺点使用场景))

代理模式 (ProxyPattern)