代理模式 (Proxy)



 GOF意图:为其他对象提供一种代理以控制对这个对象的访问

角色:

1) 抽象主题角色(Subject):统一接口

2)代理角色(Proxy):

保存一个引用使得代理可以访问实体。若 RealSubject和Subject的接口相同,Proxy会引用Subject。

提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体。

控制对实体的存取,并可能负责创建和删除它。

3) 真实主题角色(RealSubject):定义了代理角色(proxy)所代表的具体对象.   

实现:略

使用场景:

当我们需要使用的对象很复杂或者需要很长时间去构造,这时就可以使用代理模式(Proxy)。例如:如果构建一个对象很耗费时间和计算机资源,代理模式(Proxy)允许我们控制这种情况,直到我们需要使用实际的对象。

一个代理(Proxy)通常包含和将要使用的对象同样的方法,一旦开始使用这个对象,这些方法将通过代理(Proxy)传递给实际的对象。 

一些可以使用代理模式(Proxy)的情况:

一个对象,比如一幅很大的图像,需要载入的时间很长。    

一个需要很长时间才可以完成的计算结果,并且需要在它计算过程中显示中间结果

一个对象只有有限的访问权限,代理模式(Proxy)可以验证用户的权限

优点:

(1).职责清晰

真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。

(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。

(3).高扩展性

猜你喜欢

转载自jishudaren.iteye.com/blog/2295132