Facade科技信息计算机与网络Facade模式与Adapter模式的区别及联系苏州大学计算机科学与技术学院沙洲职业工学院电子信息工程系王浩刘红梅[摘要]软件危机的加剧一直困扰着软件产业的发展,而面向对象技术对缓解软件危机起到了一定的积极作用,提高了软件的开发效率并增加了软件的可复用性,但随着软件工程项目规模的不断膨胀,需要在设计层面上来寻找一种能够应对软件需求变化的方法——软件设计模式。本文针对软件工程中常用的两种设计模式:Facade模式和Adapter模式,根据软件设计模式思想,阐述了两种模式的基本原理、区别和联系,进而阐述使用这两种模式高效地创建出灵活、可复用的软件设计的思路与方法。[关键词]Facade模式Adapter模式设计模式面向对象软件工程0.引言现在软件技术是当今信息技术的重要组成部分,但软件危机也一直伴随着软件技术的发展而不断加剧,困扰着软件设计工程师们。怎样设计出高效、高质量、可复用的软件产品成为软件从业者追求的目标。面向对象技术的产生从一定程度上缓解了软件危机所带来的影响,类的引入使工程更加容易分割、控制和度量,在很长的一段时间内,使用面向对象方法似乎可以解决软件危机带来的所有问题。但是,随着软件产业的分工明细化,软件规模的不断扩大,软件开发商不希望旧有的开发成果被完全放弃,而是希望将一些可用的部件移植到新的软件项目中(重新开发该部件需要重新投入人力、物力和资金),而且,当前的项目中的一些部件,很可能就是今后项目中的一些可复用部分。这就要求软件项目在设计阶段就考虑到复用性,这就要求软件的设计必须更加接近“语义”,对软件设计过程进行更高一级抽象,得到“在某一背景下某类软件设计问题的统一的解决方案”,这就形成了某种“设计模式”。在设计模式应用过程中,有两种比较常用的模式Facade模式Facade模式的基本意图在于:简化原有系统的使用方式,或者定义一个通用的标准接口。Facade模式的结构图如图1。3.Adapter模式内容和应用随着信息技术的迅速发展,对软件项目开发的周期也要求越来越短。开发项目的过程中并不是所有的软件项目都是从零开始,现在软件产业对软件项目复用的要求越来越高,在面向对象软件工程中,已有的、功能与目标相似的类常常被复用,为了使它能够应用于新的工程中,就必须使它的接口与新工程完全匹配。处理这样的问题有这样的几种方法:一种方法是修改原有的类,使他满足新工程的要求,但这要求设计和开发人员必须深入到原有类的内部,修改实现结构,这增加了工作强度和工作难度;另外一种方法是使用面向对象的继承方法,但是可能目标类必须派生于某一个基类,如何解决这样的问题,Adapter模式给出较好的解决方法。Adapter模式的根本目的在于调节原类和目的类之间的接口差异,从而实现工程复用。Adapter模式的结构图如图2,具体UML图形请参阅《UML及建模》。和Adapter模式,这两种模式常常被初学者所混淆,模式的误用往往会将软件设计变得复杂而低效;能否正确地区分并理用户解这两种模式,成了这两种模式应用过程中的关键问题。1.设计模式简介目标类+方法A()Adapter类+方法A()原有类+方法TA()模式是在某一背景下某个问题的一种解决方案。它们绝不只是解决某人个别问题的模板。它们是描述动机的一种方式,不仅包括我们要得到的效果,也包括困扰我们的问题。设计模式是面向对象技术的最新进展之一。设计模式源于建筑学和人类学,后来从事软件设计的科学家借鉴其思想,应用于软件设计中,特别是复用软件的设计,得到了很好的效果。设计模式按照其目的可以分成三类:创建型(Creational)、结构型(Structural)和行为型(Behavioral)。创建型模式于对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互及怎样分配职责进行描述。Facade模式和Adapter模式都是属于结构型模式。2.Facade模式内容和应用在软件项目中,常常遇到这样的情况,新的项目可以利用原有项目中的子系统中的部分功能来完成特定任务,但是原有的项目子系统并不是为现有项目而设计的,所以很多的功能是现有系统所不需要的,而且可能实现新系统功能的时候需要使用原有系统中的各个不同层次的功能,使设计和开发人员完全清楚旧有系统并将新系统所需功能划分出来需要较多的工作成本,如果需要在新项目的设计过程中解决这个问题,可以使用Facade模式。旧有系统接口图1Facade模式原理结构图将原有类的接口“适配”为目标类接口:在方法A中,以适当的方法调用方法TA。图2Adapter模式原理结构图4.Facade模式与Adapter模式的区别与比较通过以上对两种模式的了解,可以看出两个模式的共同点:它们都是对已经存在的类或系统进行设计(工程复用)。而两个模式的不同点:Adapter模式只对接口进行适配,而不关心类内的情况,而Facade模式不但向上构造接口,还可能对原系统内的功能进行重新组织;Facade模式可以将旧有系统的接口进行简化,而Adapter模式中,必须按照某个特定的目标对接口进行设计,不能简化任何接口,甚至可能目标接口比原有接口更复杂,因为这不是Adapter模式要解决的问题,它主要解决接口匹配问题。下面通过设计实例来深入理解这两种模式。在某医院中,部署了HIS(医院信息系统)来管理医院内的各种信息。现在医院内部要构建自动药房系统,两种系统间要相互协作实现自动发药,在这里由于在HIS系统中已经具有了一些自动药房系统具有的功能和资源,那么就应该对原有的系统进行合理的复用,节约开发成本,缩短开发周期。但是HIS系统是一个庞大复杂的系统,而且对于自动药房系统,多数的功能与接口是无用的,为了使问题变得简单,减少后期维护开销,可以使用Facade模式对HIS接口进行简化设计。通过图3可以看出,使用Facade模式设计了“简化的HIS接口”,这样使问题变得简单,自动药房系统要使用HIS的功能时,它只要通过一个简单的接口就能实现,从而达到了复用并简化的目的。—198—HIS科技信息计算机与网络自动药房系统处方管理库存管理发药管理HIS系统简医生管理处方管理病人管理化的接床位管理科室管理资金管理口类型进行适配,使之与目标类的结构相同,同理,对成员函数也进行了适配。在这里,Adapter模式的应用,并不涉及原有类的内部结构,只是对接口的一系列的调整,从而实现了高效合理的复用。5.结论通过对Facade模式和Adapter模式的分析和比较,可以进行如下总结,Facade模式侧重于系统应用接口的简化,而药品管理⋯⋯图3使用Facade模式对HIS接口进行简化设计下面再看一下Adapter模式的应用,实现自动药房系统时,由于使用的HIS系统的处方类,但HIS系统的处方类的结构可能于自动药房系统的处方类格式不同,这就造成了接口的不匹配,对于接口匹配的问题,使用Adapter模式进行设计是Adapter模式侧重与接口的匹配。在具体的软件设计应用中,只要遵循这样的原则,就可以将这两种设计模式应用自如。本文只是针对于两种设计模式进行了研究,设计模式有很多种类,这些模式正越来越多地应用于众多的可复用软件项目的设计中,随着软件产业的不断蓬勃发展,设计模式的应用场合必将更加广阔。参考文献高效的选择。处方Adapter类[1]AlanShalloway、JamesR.Trott《,出版社,2006.10:65-70设计模式解析》.人民邮电目标处方类{abstract}-处方编号:char-医生编号:char原有处方类[2]ErichGamma,RichardHelmet,RalphJohnson,JohnVlis--处方编号:char-病人编号:char-处方序号:int-医生序号:intside《s,设计模式——可复用面向对象软件的基础》.机械工业出-医生编辑:char-病人编号:char+结算():bool+发药():bool-病人序号:int版社,2008.2:359-360+结算():bool+标记发药():int+标记收款():int[3]郭宁《.UML及建模》,清华大学出版社,2007.1+发药():bool将原有处方类中的数据成员类型进行“适配”,将原处方类中的成员函数返回值类型进行“适配”[4]邵维忠,杨芙清《.社,2006.12[5]邵维忠,杨芙清《.社,2007.5面向对象的系统分析》.清华大学出版面向对象的系统设计》.清华大学出版图4添加Adapter类[6]姜江等《.PowerDesigner数据库系统分析设计与应用》.电通过添加一个“处方Adapter类”,将原有处方的数据成员子工业出版社,2004.8(上接第195页)5结束语计算机网络的安全问题越来越受到人们的重视,本文简要参考文献[1]邓文渊,陈惠贞,陈俊荣《.铁道出版社,2003.4ASP与网络数据库技术》.中国的分析了计算机网络存在的几种安全威胁,并探讨了计算机网络的几种安全防范措施。总的来说,网络安全不仅仅是技术问题,同时也是一个安全管理问题。我们必须综合考虑安全因素,制定合理的目标、技术方案和相关的配套法规等。随着计算机网络技术的进一步发展,网络安全防护技术也必然随着网络应用的发展而不断发展。[2]陈斌.计算机网络安全于防御.信息技术与网络服务,2006.04[3]夏丹丹,李刚,程梦梦,于亮.入侵检测系统综述.网络安全技术与应用,2007.01[4]信息管理系列编委会.网络安全管理.中国人民大学出版社,2003(上接第196页)3、将三段文字加15%的底纹图案式样,小四号宋体,1.5倍行距。操作过程提示:1、输入三段文字后,选定三段文字,单击菜单【格式】→【分栏】命令,在预设框中选择“两栏”(其他的按默认设置)后,再单击确定按钮。2、单击菜单【插入】→【文本框】→【竖排】命令后在栏距的适当位置拖动一个长条形的竖排文本框,输入内容“青年人更应珍惜时间”,再选定文本框,单击菜单【格式】→【文本框】命效的:过去难以想象的迟到、早退、缺课等现象现在不见了;过去“喧闹”“、游动”的课堂纪律现在安静了;过去教学时间不够、任务不能完成的情况现在改观了。随着日积月累的知识点的增加,学生逐步体会到了计算机学习的重要性,学习的劲头越来越足。随着学生知识基础的巩固和操作技能的熟练,上机课的任务可以加大,评定的标准可以提高。在这种严谨而有效的管理方法约束下,中职生的养成行为一定能得到良好的转变,中职生的计算机应用水平一定能得到切实的提高。参考文献令,设定它的版式为四周型环绕;设置该文本框为三号隶书体。3、选定三段文字,单击菜单【格式】→【边框和底纹】命令,[1]谭浩强,徐士良《.社,2002年6月计算机基础知识教程》.清华大学出版选择底纹选项卡,在样式框中选择“15%”后按“确定”按钮;单击菜单【格式】→【段落】命令,设置首行缩进2字符,行距1.5倍;单击菜单【格式】→【字体】命令,设置小四号宋体。教学实践表明,中职生上机课的上述管理方法是行之有[2]戴凤弟.中等职业学校教材《五笔字型基础与练习》.高等教育出版社,2005年5月(上接第197页)stringPassword=txtPassword.Text.Trim.ToString();//同上stringstrMessage=IsAddUser(UserName,Password);//调用业务层的类lblMessage.Text=strMessage;}4总结本文结合ASP.NET2.0技术的新特性提出了三层框架的优点及其实现的方法,并展示了一个简单的三层架构模型,对理论和实践有很强的指导意义。参考文献[1]周杰韩.NET框架与元模式研究[J].计算机工程与应用,2002,38(23):1412143.[2]谈冉,陈巍,薛胜军.设计模式在典型.net三层架构Web程序中的应用[J].武汉理工大学学报,2006,30(2):3442346.[3]肖统民.基于设计模式的可重用web数据库应用软件的研究[J].计算机与现化,2006,7:1002103.