版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011815404/article/details/88931578
【概述】
代理模式给某一个对象提供一个替身或占位符,以控制对这个对象的访问。
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动,在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式的本质是控制对象访问
【UML】
代理模式有三个角色:
- 抽象主题角色:Subject,声明真实主题和代理主题的共同接口,这样在任何使用真实主题的地方都可以使用代理主题
- 真实主题角色:RealSubject,定义了代理角色所代表的真实对象
- 代理主题角色:Proxy,代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主题;控制真实主题的应用,负责在需要的时候创建真实主题对象(和删除真实主题对象)
【代理模式的应用】
1.远程代理
为一个位于不同的地址空间的对象提供一个局域代表对象,可以隐藏一个对象存在于不同地址空间的事实,这个不同的地址空间可以是在本机器中,也可是在另一台机器中。
其可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在,客户完全可以认为被代理的对象是局域的而不是远程的,而代理对象承担了大部分的网络通信工作。
其结构图如下图所示:
2.虚拟代理
虚拟代理的代理对象可以在必要的时候才将被代理的对象加载,当一个模块的加载十分耗费资源时,其可以对加载的过程加以必要的优化。
简单来说,对于开销很大的对象,只有在使用它时才创建,这个原则可以为节省很多宝贵的内存资源。
扫描二维码关注公众号,回复:
5735678 查看本文章
例如:如果对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片 Proxy 来代替真正的图片
3.保护代理
保护代理可以在运行时对用户的有关权限进行检查,然后在核实后决定将调用传递给被代理的对象。
例如:授权机制就是一个保护代理,不同级别的用户对同一对象拥有不同的访问权限
4.智能引用代理
当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。
5.不常用的代理
- Copy-on-Write 代理:虚拟代理的一种,将复制拖延到只有在客户端需要时,才真正采取行动。
- Cache 代理:为昂贵操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
- Firewall 代理:防火墙,保护目标,不让恶意用户接近。
- Synchronization 代理:同步化代理,使几个用户能够同时访问目标对象而没有冲突。