1。引言
一个螺丝和一个螺丝母,本质上没有什么区别,一个插座和一个插线板,一个水龙头和水管,一个饮水机和一个水桶,锁和钥匙,这些成对事物的事物本来没有什么本质联系,在面向对象的角度来说也不存在多的共性,但是又经常成对使用。
如何让这些不兼容的类在一起和谐的工作呢,就需要使用结构性设计模式中的适配模式
2.定义与结构图
将一个类的接口转换成客户希望的另外一个接口。 Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 结构图:
3)如何实现
实现适配器模式有两种方式,第一种是组合(Composition),第二种是继承(Inheritance),一般情况下组合比继承更加灵活,另外还有个 Pluggable Adapters ,支持插件的适配模式。这种方式主要利用反射来完成对公有成员的访问。
4) 适配器模式在.net的应用
最大应用为
COM Interop ,Com Interop是com与.net之间的一个桥梁,通过它就可以透明的访问com对象和.net对象,而忽视二者在设计结构上的区别 。
还有DataAdapter,这个我们经常使用,它将Connection,Command,DataSet对象组织起来,形成访问数据的一个强大工具类。起到了数据库与DataSet之间纽带与桥梁的作用
实现要点(以下引用出在 blog )
1.Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。
2.Adapter模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。
3.Adapter模式的实现可以非常的灵活,不必拘泥于GOF23中定义的两种结构。例如,完全可以将Adapter模式中的“现存对象”作为新的接口方法参数,来达到适配的目的。
4.Adapter模式本身要求我们尽可能地使用“面向接口的编程”风格,这样才能在后期很方便的适配。[以上几点引用自MSDN WebCast]