为什么使用proxy模式?
意图:为其它对象提供一种代理 (呵呵 名词解释名词)以控制对这个对象的访问
GOF他们的意思是:客户端在一些不想或者不能直接引用一个对象的情况下,在客户和目标对象之间加一个中间层,去掉不让客户直接使用或者增加一些客户需要的服务。这个中间层就扮演代理的角色。
为什么要使用代理模式呢?
1:对于一个已经存在的对象,如果客户端需要使用,但需要对原有的方法做一些扩展或修改,
这种情况下我们只有两种选择:修改原有方法来适应客户端的需要,或者在他们之间加一个第三者,该“第三者”来调用原有的方法并且对方法产生的结果进行一定的控制或修改。第一种方法是明显违背了“对扩展开放、对修改关闭”(开闭原则),而且在原来方法中作修改可能使得原来的设计被破坏 而且可能修改的比较麻烦。再说 我们不能光顾自己不是?你修修该该 用的方便了,那别人怎么办?这个类可能在别的地方也使用呀! 所以 我们一般采用第二种方法 。也就是使用代理模式 当然也 不是说 任何情况下我们都不能使用第一种方法,如果原来的类本来设计的就有一些问题,我们这时候修改一下 有什么不可以呢? 可能有人会大声说,你不能这样弄呀,这违反了 开闭原则。呵呵 ,说这话,可能是还没有理解软件设计,“这些原则并不是随时随地可以喷洒的香水,只有我们在需要使用他诊断臭味的时候才派上用场” -----这话是《敏捷软件开发 原则 模式 》的作者说的。软件设计是艺术 既然是艺术 那么很多时候 就是一个取舍的过程,要的是设计的优雅(简单,清晰 无重复 易于修改。。。)
代理模式的结构
代理模式所涉及的角色有:
抽象主题角色(Subject):真实主题和代理主题的共同接口,好处是在任何使用真实主题的地方都可以使用代理主题。
代理主题(Proxy)角色:代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主体;控制对真实主题的访问,负责在需要的时候创建真实主题对象(和删除真实主题对象);代理角色通常在将客户端调用传递给真实的主题之前或之后,都要执行某些操作,而不是单纯的将调用传递给真实主题对象。废话,如果只是简单的调用 ,又没它存在的必要了 呵呵!
真实主题角色(RealSubject)角色:定义了代理角色所代表的真实对象。
总结:
Proxy、Facade以及Adapter可能都是对对象的一层封装,侧重点不同。Proxy基于一致的接口进行封装,Facade针对封装子系统,转化为高层接口,而Adapter的封装是处于适配接口的目的。

浙公网安备 33010602011771号