23种设计模式之Adapter模式

一句话
什么是Adapter?Adapter就是一个转换器,比如一个电源插头可以让一个两插头的电器使用墙壁上的三插头 电源。这次的介绍将不写代码,虽然设计模式是为了代码而生,但我认为这是一种看世界的方法,不仅仅是一种代码的设计方式,所以这次的适配器模式因为比较简 单和容易理解就不再写代码解释,但适配器的思想能用在软件设计、工程建筑、日常生活等待方面...
意图
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
结构图
图1 类的Adapter模式结构图
图2 对象的Adapter模式结构图

两种A dapter模式的区别
1.类的适配器是扩充没有的方法; 对象的适配器主要是修改方法外观。

2.类适配器模式基于继承;对象适配器模式基于组合。  
   
3.类适配器模式只能是适配者是接口,不能利用它子类的接口,当类适配器建立时,它就静态地与适配者关联;对象适配器模式可以应用在适配者是接口和它所有的子类。  
   
4.类适配器模式中适配者作为适配器的基类,所以适配器能够重写适配器中的方法。但是对象适配器模式不能够重写,因为没有继承关系,但是也能够“重新实现”适配者中方法。  
   
5.类适配器模式中客户端代码对适配者中声明的代码是可见的;对象适配器模式中客户端和适配者完全不相干,只有适配器拥有适配者的引用。
实现要点
1.Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。
2.Adapter模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。
3.Adapter模式的实现可以非常的灵活,不必拘泥于GOF23中定义的两种结构。例如,完全可以将Adapter模式中的“现存对象”作为新的接口方法参数,来达到适配的目的。
4.Adapter模式本身要求我们尽可能地使用“面向接口的编程”风格,这样才能在后期很方便的适配。[以上几点引用自MSDN WebCast]
效果
对于类适配器:
1.用一个具体的Adapter类对Adaptee和Taget进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。
2.使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子类。
3.仅仅引入了一个对象,并不需要额外的指针一间接得到Adaptee.
对于对象适配器:
1.允许一个Adapter与多个Adaptee,即Adaptee本身以及它的所有子类(如果有子类的话)同时工作。Adapter也可以一次给所有的Adaptee添加功能。
2.使得重定义Adaptee的行为比较困难。这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。
适用性
在以下各种情况下使用适配器模式:
1.系统需要使用现有的类,而此类的接口不符合系统的需要。
2.想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
3.(对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。
总结
总之,通过运用Adapter模式,就可以充分享受进行类库迁移、类库重用所带来的乐趣。

你可能感兴趣的:(23种设计模式之Adapter模式)