`
阅读更多

Proxy 代理,为其他对象提供一个代理以控制这个对象。

    Proxy 代理模式还是比较好理解的,一般风为虚拟代理和远程代理。

    虚拟代理通常用于代理那些创建昂贵代价的对象以及那些急于立即创建的对象,直到它真正需要时才会被创建或初始化。比较常见的例子就是 网页 的图片,在还有flash里面的Loader类,虚拟代理还有一个好处就是惰性序列化,比如获得一个xml数据的代理就是一个很好的例子。一个体积庞大的xml的解析过程是很耗时的,我们不一定要等到它完全解析为我们需要的数据,我们可以创建一个代理,需要用到那部份数据时在去解析那部份数据,这样就会避免解析过程的耗时。

 

   代理还有一个用处就是远程代理,它替代的是一个远程的对象。它可以是和代理分离的swf文件、flash Remote服务、SOAP服务、REST服务以及其他任意的服务。这时远程代理扮演的是一个本地的角色,它拥有和远程对象一样的公共方法作为远程资源,代表对远程资源的请求。

 

Adaptor 模式 、Facade模式与代理的模式很相似。但是最主要的就是,代理实现和代理对象一样的接口。adaptor需要更改装换对象的API,而Facade是简化系统的API从而提供一个容易操作的接口。Decorator模式呢,虽然也是实现和装饰对象一样的接口,或者是直接继承于源对象的抽象类,但是Decorator 的目的在与对源对象进行Wrap,以便添加一些新的东西。

 

 

 

 



 结构型模式的讨论,摘自《设计模式》

    你可能注意到了结构型模式质之间的相似性,尤其是他们的参与者和协作者之间的相似性。

    1、Adapter和Bridge,他们之间有一些共同特征。他们都给另一个对象提供了一定程度上的间接性,因而有利于系统的灵活性。他们都涉及到重自身以外的一个接口向这个对象转发请求。他们的不同之处在于,Adapter主要是为了解决两个已有接口之间的不匹配的问题,它不会考虑接口是怎么实现的,也不考虑他们各自如何的演化,Adapter不许要对两个独立设计的类中的任何一个进行重新设计,就能使他们协同工作。Bridge是,对象的接口与它的实现部分进行桥接,这个模式虽然允许你修改他的类,但是它仍然提供了一个稳定的接口。

 

   当你发现,需要将两个接口不同的类,必须同时工作时,就有必要使用Adapter模式,其目的还是为了代码的重用。而Bridge的使用者必须事先知道,抽象类有多个实现部分,并且这两者是独立演化的。Adaper是在类已经设计好之后,实施,Bridge是在设计类之前实施。

 

  也许你认为Facade是一组对象的适配器,但是你也许忽略了一个事实,Facade可能定义了一个新的接口,而Adapter则一定是复用了其中的一个接口,它并没有定义新的接口。

 

 

    2、Composite 、Decorator 、Proxy,Composite和Decorator具有相似的结构图,这点说明他们都是基于递归组合来组合可变数目的对象。这个共同点也许会是你认为,Decorator是一个退化了的Composite,这个观点是不对的。他们的相似点仅止于递归组合,他们的模式的目的是不一样的。Decorator旨在是你能够不需要生成子类就可以给对象添加职责。这就避免了静态类实现所有的功能组合,从而导致类爆炸。Composite旨在构造类,使得相关度 对象能够一统一的方式去处理,就像处理单个对象一样。

 

  尽管他们的目的,截然不同,当却具有互补性。所以Decorator和Composite经常协同使用。在使用这两种模式的时候,我们无需定义新的类,只要将对象插接在一起就可以了。

 

   另一个与Decorator 相似的,模式是Proxy。这两个模式都描述了怎样为对象提供一定程度的间接引用,两种模式都保留了,指向另一个对象的指针,他们想这个对象发送请求。同样的他们有不同的目的。

 

 

  • 大小: 42.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics