技术开发 频道

几种结构型设计模式的对比


IT168技术文档】 
    各种结构型设计模式由于或是采用类继承机制、或是采用对象组合方式实现,所以很多都具有一定的相似性,下面对比较相似的四组模式进行讨论 

    1、适配器Adapter VS 组合Composite 
    相似点:都为客户提供了一致性。 
    Adapter通过提供一致性使被适配组件Adaptee和目标组件Target兼容,从而使得这些组件可以一起使用; 
    Composite通过提供一致性使组合对象和单个对象对用户透明,用户可以一致的加以使用; 
    不同点: 
    1)效果不同: 
    Adapter主要针对不是一起开发的两个类,接口不兼容但是后面开发的类正好可以重用前一个类,为了能够重用,从而需要通过适配器Adapter进行适配; 
    Composite主要对一个部分-整体的类层结构进行组合,从而便于用户统一使用,以及增加组件的可扩展性,当需要增加新组件时,组件自动融入类层次结构。 
    2)结构不同: 
    Composite模式可以递归进行组合,以组合成非常复杂的组件;Adapter模式无递归需求。 

    类结构对比图如下:


    2、组合Composite VS 装饰器Decorator 
    相似点:类结构相似、且都基于递归组合 
    Composite模式通过递归,组合基元组件为组合组件,再组合组合组件为复杂组合组件; 
    Decorator模式通过递归,可以动态地为对象增加多种额外功能或装饰; 
    不同点: 
    1)目的不同: 
    Composite模式表现部分和整体对象关系,统一基元对象和组合对象的使用; 
    Decorator模式为了动态的给一个对象添加一些额外的职责; 
    2)结构不同: 
    Composite模式中组合类可能由多个组件(包括基元和组合组件)组成,Composite通常通过容器包含其所容纳的对象; 
    Decorator模式一般只通过一个对象引用包含被装饰得对象,通常一次只装饰一个对象。 
    类结构对比图如下:


    3、装饰器Decorator VS 代理Proxy 
    相似点:类结构相似,都提供了一定程度的间接性 
    Decorator和被装饰的组建ConcreteComponent有相同的接口Component,Proxy和被代理的对象RealSubject也有相同的接口Subject。 
    Decorator和Proxy通常都含有一个对象,Decorator对这个对象进行包装,Proxy对这个对象进行代理。 
    不同点: 
    1)目的不同: 
    Decorator动态的为一个对象添加一些额外的功能或属性; 
    Proxy为对象提供一个代理以便进行相应的控制和管理,如远程代理为不在同一地址空间的对象提供本地化代表、虚代理提供    根据需要才创建开销很大的对象等等; 
    2)结构不同: 
    Decorator可以递归装饰,但Proxy一般并不进行递归代理 

    类结构对比图如下:


    4、外观Facade VS 代理Proxy 
    相似点:都提供一定的间接性,Facade可以看作是一个子系统的代理Proxy 
    Facade通过为子系统提供一个门面,在用户和子系统之间建立一个方便简化的使用协议; 
    Proxy为被代理对象提供间接访问,从而根据不同的代理类型完成不同管理和控制任务; 
    不同点: 
    1)目的不同: 
    Facade模式为子系统提供一个高层接口,以达到简化子系统使用的目的; 
    Proxy为被代理对象提供间接访问,从而可以根据不同代理类型提供不同的任务; 
    结构不同: 
    Facade了解整个子系统,并把方法调用进行转发;Proxy模式只代理目标对象,且通常都提供一定的服务。
类结构对比图如下:

0
相关文章