设计模式 —— 代理模式(Proxy)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011815404/article/details/88931578

【概述】

代理模式给某一个对象提供一个替身或占位符,以控制对这个对象的访问。

所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动,在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 

代理模式的本质是控制对象访问

【UML】

代理模式有三个角色:

  • 抽象主题角色:Subject,声明真实主题和代理主题的共同接口,这样在任何使用真实主题的地方都可以使用代理主题
  • 真实主题角色:RealSubject,定义了代理角色所代表的真实对象
  • 代理主题角色:Proxy,代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主题;控制真实主题的应用,负责在需要的时候创建真实主题对象(和删除真实主题对象)

【代理模式的应用】

1.远程代理

为一个位于不同的地址空间的对象提供一个局域代表对象,可以隐藏一个对象存在于不同地址空间的事实,这个不同的地址空间可以是在本机器中,也可是在另一台机器中。

其可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在,客户完全可以认为被代理的对象是局域的而不是远程的,而代理对象承担了大部分的网络通信工作。

其结构图如下图所示:

2.虚拟代理

虚拟代理的代理对象可以在必要的时候才将被代理的对象加载,当一个模块的加载十分耗费资源时,其可以对加载的过程加以必要的优化。

简单来说,对于开销很大的对象,只有在使用它时才创建,这个原则可以为节省很多宝贵的内存资源。

例如:如果对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片 Proxy 来代替真正的图片

3.保护代理

保护代理可以在运行时对用户的有关权限进行检查,然后在核实后决定将调用传递给被代理的对象。

例如:授权机制就是一个保护代理,不同级别的用户对同一对象拥有不同的访问权限

4.智能引用代理

当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。 

5.不常用的代理

  • Copy-on-Write 代理:虚拟代理的一种,将复制拖延到只有在客户端需要时,才真正采取行动。
  • Cache 代理:为昂贵操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
  • Firewall 代理:防火墙,保护目标,不让恶意用户接近。
  • Synchronization 代理:同步化代理,使几个用户能够同时访问目标对象而没有冲突。 
     

猜你喜欢

转载自blog.csdn.net/u011815404/article/details/88931578