Facade模式与Adapter模式的区别及联系
Facade模式与Adapter模式的区别及联系
科技信息
计算机与网络
Facade模式与Adapter模式的区别及联系
苏州大学计算机科学与技术学院
[摘
沙洲职业工学院电子信息工程系王浩刘红梅
软件危机的加剧一直困扰着软件产业的发展,而面向对象技术对缓解软件危机起到了一定的积极作用,要]
提高了软件的开发效率并增加了软件的可复用性,但随着软件工程项目规模的不断膨胀,需要在设计层面上来寻
找一种能够应对软件需求变化的方法———软件设计模式。本文针对软件工程中常用的两种设计模式:Facade模式和Adapter模式,根据软件设计模式思想,阐述了两种模式的基本原理、区别和联系,进而阐述使用这两种模式高效地创建出灵活、可复用的软件设计的思路与方法。[关键词]Facade模式Adapter模式设计模式面向对象软件工程
0.引言
现在软件技术是当今信息技术的重要组成部分,但软件危机也一直伴随着软件技术的发展而不断加剧,困扰着软件设计工程师们。怎样设计出高效、高质量、可复用的软件产品成为软件从业者追求的目标。面向对象技术的产生从一定程度上缓解了软件危机所带来的影响,类的引入使工程更加容易分割、控制和度量,在很长的一段时间内,使用面向对象方法似乎可以解决软件危机带来的所有问题。但是,随着软件产业的分工明细化,软件规模的不断扩大,软件开发商不希望旧有的开发成果被完全放弃,而是希望将一些可用的部件移植到新的软件项目中(重新开发该部件需要重新投入人力、物力和资金),而且,当前的项目中的一些部件,很可能就是今后项目中的一些可复用部分。这就要求软件项目在设计阶段就考虑到复用性,这就要求软件的设计必须更加接近“语义”,对软件设计过程进行更高一级抽象,得到“在某一背景下某类软件设计问题的统一的解决方案”,这就形成了某种“设计模式”。在设计模式应用过程中,有两种比较常用的模式Facade模式和Adapter模式,这两种模式常常被初学者所混淆,模式的误用往往会将软件设计变得复杂而低效;能否正确地区分并理解这两种模式,成了这两种模式应用过程中的关键问题。
Facade模式的基本意图在于:简化原有系统的使用方式,或者定义一个通用的标准接口。Facade模式的结构图如图1。
3.Adapter模式内容和应用
随着信息技术的迅速发展,对软件项目开发的周期也要求越来越短。开发项目的过程中并不是所有的软件项目都是从零开始,现在软件产业对软件项目复用的要求越来越高,在
功能与目标相似的类常常被复面向对象软件工程中,已有的、
用,为了使它能够应用于新的工程中,就必须使它的接口与新工程完全匹配。处理这样的问题有这样的几种方法:一种方法是修改原有的类,使他满足新工程的要求,但这要求设计和开发人员必须深入到原有类的内部,修改实现结构,这增加了工作强度和工作难度;另外一种方法是使用面向对象的继承方法,但是可能目标类必须派生于某一个基类,如何解决这样的问题,Adapter模式给出较好的解决方法。
Adapter模式的根本目的在于调节原类和目的类之间的接口差异,从而实现工程复用。Adapter模式的结构图如图2,具
《UML及建模》。体UML图形请参阅
目标类
用户
()+方法A
Adapter类()+方法A
原有类()+方法TA
1.设计模式简介
模式是在某一背景下某个问题的一种解决方案。它们绝
不只是解决某人个别问题的模板。它们是描述动机的一种方式,不仅包括我们要得到的效果,也包括困扰我们的问题。设计模式是面向对象技术的最新进展之一。设计模式源于建筑学和人类学,后来从事软件设计的科学家借鉴其思想,应用于软件设计中,特别是复用软件的设计,得到了很好的效果。设计模式按照其目的可以分成三类:创建型(Creational)、结构型(Structural)和行为型(Behavioral)。创建型模式于对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互及怎样分配职责进行描述。Facade模式和Adapter模式都是属于结构型模式。
将原有类的接口“适配”为目标类接口:在方法A中,以适当的方法调用方法TA。
图2Adapter模式原理结构图
4.Facade模式与Adapter模式的区别与比较
通过以上对两种模式的了解,可以看出两个模式的共同
点:它们都是对已经存在的类或系统进行设计(工程复用)。而两个模式的不同点:Adapter模式只对接口进行适配,而不关心类内的情况,而Facade模式不但向上构造接口,还可能对原系统内的功能进行重新组织;Facade模式可以将旧有系统的接口进行简化,而Adapter模式中,必须按照某个特定的目标对接口进行设计,不能简化任何接口,甚至可能目标接口比原有接口更复杂,因为这不是Adapter模式要解决的问题,它主要解决接口匹配问题。
下面通过设计实例来深入理解这两种模式。在某医院中,部署了HIS(医院信息系统)来管理医院内的各种信息。现在医院内部要构建自动药房系统,两种系统间要相互协作实现自动发药,在这里由于在HIS系统中已经具有了一些自动药房系统具有的功能和资源,那么就应该对原有的系统进行合理的复用,节约开发成本,缩短开发周期。但是HIS系统是一个庞大复杂的系统,而且对于自动药房系统,多数的功能与接口是无用的,为了使问题变得简单,减少后期维护开销,可以使用Facade模式对HIS接口进行简化设计。
通过图3可以看出,使用Facade模式设计了“简化的HIS接口”,这样使问题变得简单,自动药房系统要使用HIS的功能时,它只要通过一个简单的接口就能实现,从而达到了复用并简化的目的。
2.Facade模式内容和应用
在软件项目中,常常遇到这样的情况,新的项目可以利用原有项目中的子系统中的部分功能来完成特定任务,但是原有的项目子系统并不是为现有项目而设计的,所以很多的功能是现有系统所不需要的,而且可能实现新系统功能的时候需要使用原有系统中的各个不同层次的功能,使设计和开发人员完全清楚旧有系统并将新系统所需功能划分出来需要较多的工作成本,如果需要在新项目的设计过程中解决这个问题,可以使用Facade模式。
旧有系统
Facade
接口
图1Facade模式原理结构图
—


