我加入的 .NET开发者群号:429476891

导航

适配器模式探讨

 

要点

² 一个类的程序设计接口不太方便于某一个专用场合;

² 具备共同特征的类有很多,也就是有共同特征,且不适用于同样的专有场合;

² 可以把一个类的程序设计接口转换成另一个接口,这就是适配器模式;

² 适配器模式通过两种方法可以实现:第一是从原有的类派生新类,然后添加新的一致的方法,使得新类可以符合需要的接口;第二种方法是通过对象组合,也就是适配器类有一个原有类型的数据成员,把它包装成另一组使用接口,这种方法隐藏了原有类型的接口;

² 适配器模式作为结构型模式,特点是每个类型都有一个适配器,无论是派生还是组合,都是一个类型包装成另一个类型接口,而不是多个类型接口组合成一个接口,所以适配器是结构型模式里面的简单情形。

用途

例如,C#提供的winform控件ListBox,其集合数据的操作必须通过属性Items来操作。例如,Items.Add(),Items.Clear()等等。为了直接方便地使用,而不是通过Items,我们可以通过适配器模式把这些接口转换成另外一组接口来使用。

适配器模式正如平时所用的适配器,例如计算机经常使用的网络适配器,键盘适配器。还如原来的大口接头的键盘和小口接口使用的时候采用转接线,本身就是适配器的很好例子。

                                                               图1
如图1所示,是依据两种方法构造的适配器。通过继承构造的叫类适配器,而通过组合构造的叫对象适配器。对象适配器的优点是可以隐藏原有类型的接口,因为目的就是把原有的类型接口包装成另外的一组接口,因此隐藏起来要好一些。但是在只包装部分接口的情况下,就不能隐藏原有类型接口了。
                                                                  图2
  图2所示,是适配器类型的更进一步创建方法。在某些情形下,情况可能比较复杂,如果采用图1所示的方法,对系统的扩展性不利,而且耦合会太紧密。通过抽象方法定义一个接口,这个就是抽象层,然后客户程序DemoWinForm与这个抽象层发生耦合,也就是直接使用这个接口,而不是实际的类型。

这样一来,如果添加新的适配器将非常方便,而且如果适配器发生变更,也无需修改客户程序。客户程序通过抽象层消除了与实际类型的耦合。

posted on 2008-06-05 15:50  信息加油站义工  阅读(620)  评论(0编辑  收藏  举报