【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模式只代理目标对象,且通常都提供一定的服务。
类结构对比图如下: