Skip to content

Latest commit

 

History

History

ProxyPattern

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

代理模式

定义  

为其他对象提供一种代理以控制对这个对象的访问。

比如代码中的,实际进行工作的是RealSubject类,而代理类通过作为一个桥梁,隐藏了RealSubject类的存在,也就是说当RealSubject不希望客户端知道自己的存在的时候,可以通过代理方式完成一些工作。  

Tips  

当一个普通对象为了完成某项工作而必须为外界提供public接口时,有可能会发生这个合法的对象无法正常完成工作的情况,例如比较庞大的对象直接加载到内存中需要消耗比较长的时间这种情况。另外一点就是,当程序员希望截获程序中发给某个对象的消息甚至是分布式地处理时,都可以使用代理模式来解决实际会遇到的问题。

一般一个代理对象会提供一个接口,此接口与所代理的对象提供的接口是几乎一样的。当其他对象向代理对象发出请求命令时,代理对象就会将这些请求命令转发给自己所代理的对象,这样就完成了相关工作。当然,使用代理模式并不一定不存在问题,由于请求命令经历了两次转发,所以两次转发中任意的一环出现问题都会导致程序出现异常,因为代理模式的使用也要比较谨慎。  

小结  

实现代理模式需要建立一个或者多个占位符对象,即代理对象,这些代理对象可以控制对被代理对象的访问。这样一来,客户端就毋须了解目标对象的状态的变化情况。代理模式的特点同样会导致一些问题(上面小节说了)。应用代理模式对象时,代理模式与被代理的对象之间是紧耦合关系。所以在实际应用中,如果有其他的可以完成工作的更可靠的方式,一般不会选择代理模式。

代理模式一般用在一下几种情况中:

  • 当需要为一个对象在不同的地址空间提供局部的代表时;
  • 当需要创建开销非常大的对象时;
  • 当需要控制对原始对象的访问时;
  • 当需要在访问对象时执行一些附加操作时,比如可以通过代理模式对象计算访问实际对象的次数。