适配器模式在软件体系结构中的应用

时间:2022-10-05 02:29:36

适配器模式在软件体系结构中的应用

摘 要:本文主要讨论了软件设计模式中的适配器模式软件体系结构中的应用,主要介绍了适配器模式的概念,适配器模式的实现,对象适配器和类适配的区别以及适配器模式的优缺点。通过讨论适配器模式的实现方式和特点来帮助设计良好的软件结构,从而提高软件开发的效率。

关键词:适配模式;软件体系结构;设计模式

中图分类号:TP311

从20世纪60年代开始,随着“软件危机”的产生,开始对软件工程方法进行更进一步的研究,起初软件设计主要侧重于数据结构和算法的选择上,但随着软件系统的规模日益庞大和愈加复杂,软件系统的结构设计变得尤为重要。伴随着软件危机程度的加剧,软件体系结构(SoftWare architecture)的概念也应运而生。软件体系结构主要着眼于软件系统的全局组织形式,从整体上把握系统各个模块之间的联系和相互作用,从一个高层设计的的抽象层次来表征一个系统,从而简化了理解庞大系统的能力。软件体系结构包括构件、连接件和约束,它是可预制和可重构的软件框架结构。

设计模式是一种用于解决在特定环境下重复出现的特定问题的解决方案,软件设计模式就是在面向对象的软件架构设计中为了解决一个特定问题的解决方案。软件设计模式有四个基本组成要素:模式名称、问题、解决方案和效果。按照GOF提出的23个软件设计模式将其分为三类:创建型模式、结构型模式和行为型模式。创建型模式通过抽象对象实例化的过程来帮助创建对象的实例,结构型模式用于描述如何组合类和对象以获得更大的结构,行为型模式用于描述算法和对象间的职责分配。

1 适配器模式简介

适配器模式是结构型模式当中的一种,将一个类的接口转换成用户希望的另一个接口,从而使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式的主要功能是进行转换匹配,目的是复用已有的功能,而不是来实现新的接口。也就是说,客户端需要的功能应该是已经实现好了的,不需要适配器模式来实现,适配器模式主要负责把不兼容的接口转换成客户端所期望的样子就可以了。在标准的适配器模式当中,根据适配器的实现方式,适配器可以分为对象适配器和类适配器,对象适配器采用对象组合的方式类实现,类适配器采用多重继承实现多个接口来实现。

适配器的模式结构图如图所示,Client表示客户端,需要调用领域接口 Target;Target定义了客户端需要的跟特定领域相关的接口;Adaptee是已经存在的接口,通常能够满足客户端的功能需求,但是接口与客户端需求的特定领域接口不一致,需要被适配;Adapter是适配器,用于将Adaptee适配成Client需要的Target。适配器模式的调用顺序示意图如图所示。

2 适配器模式的实现

在实现适配器的时候,适配器通常是一个类,一般会让适配器类去实现Target接口,然后再适配器的具体实现里面调用Adaptee,也就是说适配器通常是一个Target类型,而不是一个Adaptee类型。在实际开发的过程当中,适配器也可以实现一些Adaptee没有实现但在Target中定义的功能。这种情况下就需要在适配器的实现里面加入新功能的实现,新加入功能的实现会用到很多Adaptee的功能,相当于利用Adaptee的功能来实现更高层的功能。当然也可以完全实现新加入的功能,和已有的功能都不相关,从而变相的扩展了功能。这样的适配器我们也通常称之为智能适配器。

另外适配器在适配的时候,也可以适配多个Adaptee,也就是说实现某个新的Target功能的时候需要调用多个模块的功能,适配多个模块的功能才能满足新接口的要求。适配器Adapter实现的复杂程度通常取决于Target和Adaptee的相似程度。如果相似度很高,比如只有方法名称不一样,那么Adapter只需要简单的转调一下接口就可以了。如果相似程度较低的话,比如所定义的方法的功能完全不一样,在Target中定义了一个方法,而在Adaptee中定义了三个更小的方法,那么这个时候在实现Adapter的时候就需要组合调用了。

3 对象适配器和类适配器

根据适配器的实现方式,适配器可以分为两种:对象适配器和类适配器。对象适配器主要依赖于对象的组合,是动态组合的方式;而类适配器主要采用多重继承对一个接口和另一个接口进行匹配,是静态的定义方式。对于类适配器,由于适配器直接继承了Adaptee,是的适配器不能喝Adaptee的子类一起工作,因为继承是静态的关系,当适配器继承了 Adaptee后,就不能再去处理Adaptee的子类了。而对于对象适配器,允许一个Adapter和多个Adaptee,包括Adaptee和它所有的子类一起工作。因为对象适配器采用的是对象组合的方式,只要对象类型正确,是不是子类都无所谓。

在功能的实现方面,对象适配器和类适配器两种方式都差不多,对于类适配器可以重新定义Adaptee的部分行为,相当于子类覆盖父类的部分实现方法,仅仅需要引入一个对象,并不需要额外的引用来间接得到Adaptee。而对于对象适配器,要重新定义Adaptee的行为比较困难,这种情况下,需要定义Adaptee的子类来实现重定义,然后让适配器组合子类,需要额外的引用来间接得到Adaptee。

4 适配器模式的优缺点

适配器模式是一种软件设计模式,我们在使用的时候需要灵活运用,不能为了用而用,而是要根据其特点发挥其特长,从而有效的帮助我们来解决问题,如果用得不恰当可能反而会适得其反。

适配器模式具有很好的复用性和可扩展性。如果功能是已经存在的,只是接口不兼容,那么通过适配器模式可以让这些功能得到更好的复用。在实现适配器功能的时候,可以调用自己开发的功能,从而自然的扩展系统的功能。另外在使用的时候切忌过多的使用适配器,这样可能会让系统显得非常凌乱,不容易整体进行把握。比如,明明调用的A接口,但内部被适配成了B接口来实现,一个系统如果太多出现这种情况,对于软件的整体结构就会有很大的破坏。因此如果不是很有必要,可以不适用适配器,而是直接对系统进行重构。

参考文献:

[1]陈臣,王斌.研磨设计模式[M].清华大学出版社,2011-1.

[2]鲁江,夏雨人.适配器模式及其应用[J].微型电脑应用,2007-07-20.

[3]钟茂生,王明文.软件设计模式及其应用[J].计算机应用,2002-08-28.

作者简介:沈甜甜(1980.9-),女,无锡人,本科毕业后取得南京航空航天大学硕士学位,2002年参加工作,一直从事于计算机方面的职业教育工作,中级职称,现致力于网络软件的教研科改工作。

作者单位:南京工程高等职业学校,南京 211135

上一篇:复习课课型模式研究 下一篇:应用型本科计算机基础课程改革探索