欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    设计模式和重构的研究与应用.pdf

    • 资源ID:69697942       资源大小:2.12MB        全文页数:57页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    设计模式和重构的研究与应用.pdf

    北京邮电大学硕士学位论文设计模式和重构的研究与应用姓名:韩菲申请学位级别:硕士专业:计算机应用指导教师:上官右黎20060309北京邮电大学硕士论文设计模式和重构的研究与应用设计模式和重构的研究与应用摘要当今的软件开发多数是在已有的一些工作基础上进行的,对软件可维护性和可复用性的要求越来越高。同时,软件维护工作在软件生命周期中占的比例也越来越大。为了提高软件的可维护性和可复用性,在系统设计的过程中,要充分参照现有的设计模式,使系统可以有一个良好的设计。同时,在系统的开发与维护过程中,要积极对软件的代码进行重构,改进系统的设计。设计模式,被用于描述特定场景下解决一般设计问题的类和相互通信的对象。每个设计模式描述了各自的应用领域和基本原则。设计模式提供了设计级的复用性和灵活性i 使轶件对需求曼f 缘撒感度降低。重构,其目的是在不改变软件的外在行为的前提下调整软件内部结构。尽管表面上重构是代码的一种整理,实际上却是对代码中蕴含的设计的调整。在某种意义上,设计模式作为重构的目标指导重构的进行。本文首先对命令、原型和单件等九种设计模式进行研究,分析总结了这些模式在虚拟实验系统中的应用。然后对重构的原则、特征和方法等进行研究,最后分析总结了部分重构方法在虚拟实验系统中的应用。关键词设计模式重构虚拟实验系统北京邮电大学硕士论文设计模式和重构的研究与应用R E S E A R C HA N DA P P L I C A T l 0 NO FD E S I G NP A T T E R N SA N DR E F A C T O R I N GA B S T R A C TN o w a d a y s,m o s to fs o f t w a r ei sd e v e l o p e do u to nt h eb a s i so fs o m ee x i s t i n gw o r k T h es o f t w a r ei ss u p p o s e dt ob em o r ea n dm o r em a i n t a i n a b l ea n dr e u s a b l e M e a n w h i l e,t h em a i n t a i n i n go ft h es o f t w a r eh a so c c u p i e dm o r ea n dm o r ew e i g h ti nt h ew h o l es o f t w a r el i f ec y c l e I no r d e rt oi m p r o v et h es o f t w a r em a i n t a i n a b i l i t ya n dr e u s a b i l i t y,m a k eS u r er e f e rt ot h ee x i s t i n ga e s i g np a t t e r n si 1 1t h ec o u r s eo fs y s t e md e s i g nS Oa st om a k eag o o dd e s i g no ft h es y s t e m M e a n w h i l e,m a k es u r er e f a c t o rt h es 0 1 a r ec o d ea c t i v e l yS Oa st oi m p r o v et h es y s t e md e s i g n D e s i g np a t t e r n sa r et od e s c r i b et h o s ec l a s s e sa n do b j e c t st h a ta r eu s e dt os o l v es o m eg e n e r a ld e s i g np r o b l e m si nt h eg i v e ns c e n e s E a c hd e s i g np a t t e r nh a sd e s c r i b e di t sa p p l i c a t i o nf i e l da n db a s i cp r i n c i p l e D e s i g np a t t e r n ss u p p l yt h er e u s a b i l i t ya n df l e x i b i l i t yi nt h ed e s i g nl e v e l,a n dm a k et h es o f t w a r el e s ss e n s i t i v et ot h ec h a n g e so fr e q u i r e m e n t R e f a c t o r i n gi sa i m e dt om o d i f yt h ei n t e m a ls t r u c t u r eo fs o f t w a r ew i t h o u tc h a n g i n gi t so b s e r v a b l eb e h a v i o r R e f a c t o r i n gl i k e st h em o d i f i c a t i o no ft h ec o d eo nt h es u r f a c e H o w e v e r,i tm o d i f i e st h eu n d e r l y i n gd e s i g no ft h ec o d ea c t u a l l y I nas e n s e,d e s i g np a t t e m sg u i d et h er e f a c t o r i n ga si t so b j e c t i v e H e r e,f i r s tn i n ed e s i g np a t t e r n s(s u c ha sc o m m a n d,p r o t o t y p e,s i n g l e t o np a t t e ma n dS Oo n)a r er e s e a r c h e d,a n da p p l i c a t i o n so ft h e s ed e s i g np a t t e r n sa r ea n a l y z e da n ds u m m e du pi nt h ev i r t u a le x p e r i m e n ts y s t e m S e c o n dp r i n c i p l e s,c h a r a c t e r i s t i c sa n dm e t h o d so fr e f a c t o r i n ga r er e s e a r c h e d F i n a l l ya p p l i c a t i o n so ft h e s er e f a c t o r i n gm e t h o d sa r ea n a l y z e da n ds u m m e du pi nt h ev i r t u a le x p e r i m e n ts y s t e m K E YW O R D Sd e s i g np a t t e r n,r e f a c t o r i n g,v i r t u a le x p e r i m e n ts y s t e m北京邮电大学硕士_ 珞文设计模式和重掏的研究与应用独创性(或创新性)声明本人声明所呈交的论文是率人在导师指导下进行的研究工作及取得的研究成果。尽我所知,豫了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或其他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。申请学位论文与资料若有不实之处,本人承担一切相关责任。本人签名:重拄j 巨日期:!:i:三2关于沦文使用授权的说明学位论文作者完全了解北京邮电大学有关保留和使用学位论文的规定,即:研究生在校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许学位论文被查阅和借阅:学校可以公布学位论文的全部或部分内容,可以允许采用影印、缩印甍其它复制手段保存、汇编学位论文。(保密的学位论文在解密启遵守此规定)保密论文注释:本学位论文属于傈密在一年解密后适用本授权书。非保密论文注释:本学位论义不属于保密范围,适用本授权书。本人签名:纽j 坠日期导师签名:丝毫壶经目期三!:圭:!地6。3;兰!北京邮电大学硕士论文设计模式和重构的研究与应用1 1 问题的提出第一章绪论当今的软件开发多数是在已有的一些工作基础上进行的,对软件可维护性和可复用性的要求越来越高。同时,软件维护工作在软件生命周期中占的比例也越来越大。软件的可维护性是指软件能够修改和升级的容易程度;软件的可复用性是指软件或软件系统在不修改或者仅做少量修改的情况下可以被新的软件系统所利用的能力。在一个软件的生命周期中,需求不可能是一成不变的,而且总是会变化的。当需求变化时,对于可维护性差的软件,会存在系统维护困难的问题。往往很难在其中加入一个新的功能,因为加入一个新功能,不仅意味着要建造一个新的独立模块,而且这个新模块可能会波及到其它很多的模块,从而导致其它模块也要作一定的修改。于是,程序员不敢轻易向系统中加入新的功能,从而造成一个软件系统一旦做好,就不能增加新功能的过于僵硬的问题。软件的若干组成部分,通常可以在同一个项目的不同地方甚至另一个项目中重复使用。对于可复用性差的软件,每当程序员发现某段代码、某个函数或者某个模块所做的事情可以在新的模块或者新的系统中使用时,也许就会发现这些已有的代码依赖于一大堆其它的东西,以至于很难将它们分开。:对于上述问题,可以通过以下两种途径来解决:在系统设计的过程中,要充分参照现有的设计模式,使系统可以有一个良好的设计。在系统的开发与维护过程中,要培养重构的习惯,积极对软件的代码进行重构,改进系统的设计。如若不然,系统将逐渐失去自己的结构。同时,值得一提的是,很多时候,设计模式可用来指导重构的进行。1 2 设计模式1 2 1设计模式的背景软件复用是解决软件危机根本途径之一,面向对象技术的普遍应用使软件的可复用性有了很大的提高。然而,随着软件的日益复杂和庞大,人们对软件可复用性的要求越来越高,他们希望所使用的软件不仅能满足当前的功能需求,而且北京邮电大学硕士论文设计模式和重构的研究与应用还要有足够的灵活性以适应将来的变化。而设计模式为我们提供了一条捷径,它帮助人们做出有利于系统复用的选择,帮助设计人员复用已成功实现的系统的概念模型,以过去成功的开发经验指导当前的软件开发,大大提高了软件开发的效率和质量。模式的概念最早是由一位叫C h r i s t o p h e r A l e x a n d e r 的建筑师提出来的,他着眼于研究建筑物的通用结构,试图找到一种结构化的、可复用的方法,以便在图纸上捕捉到伟大的建筑物的基本要素。他说:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。一般而言,一个模式有四个基本要素:模式名称(p a t t e r nn a m e):一个助记名,它用一两个词来描述模式的问题、解决方案和效果。问题(p r o b l e m)描述了应该在何时使用模式。解决方案(s o l u t i o n):描述了如何解决问题。解决方案并不描述一个特定而具体的实现,而是提供问题的抽象描述和怎样用一个具有一般意义的元素组合来解决这个问题。效果(c o n s e q u e n c e s):描述了模式应用的效果及使用模式应权衡的问题。模式的效果包括它对系统的灵活性、扩充性或可移植性的影响。同时,模式被分成三种类型:体系结构模式(a r c h i t e c t u r a lp a t t e r n):表示软件系统的基本结构化组织图式。它提供一套预定义的子系统,规定它们的职责,并包含于组织它们之间关系的规贝0 和指南。设计模式(d e s i g np a t t e r n):提供了一个用于细化软件系统的子系统或组件,或它们之间关系的图式。与设计模式相关的,还有一种模式称为反模式。设计模式经常会转变为反模式。其区别仅在于问题所处的环境。反模式是在不合适的环境下应用了设计模式,它侧重于提醒人们如何避开错误的设计思维和软件编写。惯用法(i d i o m):具体针对一种编程语言的底层模式。惯用法描述如何使用给定语言的特征来实现组件的特殊方面或它们之间的关系。1 2 2设计模式的定义设计模式,被用于描述特定场景下解决一般设计问题的类和相互通信的对象。根据其目的,设计模式可分为三类:创建型模式抽象了实例化过程,帮助一个系统独立于如何创建、组合和表示它的那些对2北京邮电大学硕士论文设计模式和重构的研究与应用象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。结构型模式处理类或对象的组合。结构型类模式采用继承机制来组合接口或实现,而结构型对象模式描述了如何对一些对象进行组合,从而实现新功能的一些方法。行为型模式对类或对象怎样交互和怎样分配职责进行描述。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。行为类模式使用继承机制在类间分派行为,而行为对象模式使用对象复合。常见的设计模式有如下几种:A b s t r a c tF a c t o r y(抽象工厂):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。A d a p t e r(适配器):将一个类的接1 2 1 转换成客户希望的另外一个接1 3。它使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。B r i d g e(桥接_):蒋抽孙分与它葡实现部分分离,使它们郡可以独立地变化。B u i l d e r(生成器):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。C h a i no f R e s p o n s i b i l i t y(职责链):为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。C o m m a n d(命令):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作。C o m p o s i t e(组成):将对象组合成树形结构以表示“部分整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。D e c o r a t o r(装饰):动态地给一个对象添加一些额外的职责。F a c a d e(外观):为子系统中的一组接口提供一个一致的界面,它定义了一个高层接口,这个接口使得这一子系统更加容易使用。F a c t o r yM e t h o d(工厂方法):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。它使一个类的实例化延迟到其子类。F l y w e i g h t(享元):运用共享技术有效地支持大量细粒度的对象。I n t e r p r e t e r(解释器):给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。I t e r a t o r(迭代器):提供一种方法顺序访问一个聚合对象中各个元素,而又北京邮电大学硕士论文设计模式和重构的研究与应用不需暴露该对象的内部表示。M e d i a t o r(中介者):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。M e m e n t o(备忘录):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。O b s e r v e r(观察者):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。P r o t o t y p e(原型):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。P r o x y(代理):为其他对象提供一个代理以控制对这个对象的访问。S i n g l e t o n(单件):保证一个类仅有一个实例,并提供一个访问它的全局访问点。S t a t e(状态);允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。S t r a t e g y(策略):定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。T e m p l a t eM e t h o d(模板方法):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。T e m p l a t eM e t h o d 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。V i s i t o r(访问者):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。其中,A b s t r a c tF a c t o r y、B u i l d e r、F a c t o r yM e t h o d、P r o t o t y p e 和S i n g l e t o n 模式属于创建型模式;A d a p t e r、B r i d g e、C o m p o s i t e、D e c o r a t o r、F a c a d e、F l y w e i g h t和P r o x y 模式属于结构型模式;C h a i nO f R e s p o n s i b i l i t y、C o m m a n d、I n t e r p r e t e r、I t e r a t o r、M e d i a t o r、M e m e n t o、O b s e r v e r、S t a t e、S t r a t e g y、T e m p l a t eM e t h o d 和V i s i t o r 模式属于行为型模式。1 2 3设计模式的优点1)使人们可以复用成功的设计。设计模式向人们展示了反复出现问题的优秀解决方案,而这些方案是经过时间考验的。2)便于设计者之间的交流。设计模式为人们提供了一套通用的设计词汇。3)利于分析模型向实现模型的转换。4北京邮电大学硕士论文设计模式和重构的研究与应用尽管许多人声称面向对象分析可以平滑地向设计转换,但实践表明远非如此。一个灵活的可复用的设计常会包含一些分析模型中没有的对象。另外,所使用的编程语言和类库也会影响设计。因此,为使设计可复用,常常需要重新设计分析模型。1 3 重构1 3 1重构的背景几乎所有成功的软件都是在不断地演进中产生的,很少有系统是在一次设计之后,就一次性编码完成的。随着系统不断的演进、需求的变化,人们不断地修改原有的软件代码及其设计,这样随着时间的推移,代码逐渐地变得臃肿起来,代码所体现的设计也变得越来越模糊。这样代码的维护会越来越困难,所需费用也会越来越高,扩展性也越来越差。为了解决这类问题,在面向对象的领域中,出现了重构的概念。重构(R 百f a 瓯。最i l g 了这一术语产生于对S m a I R a l k 莳研究和使用。当研发夕陨在精练代码,对类的继承层次和设计框架(D e s i g nF r a m e w o r k s)进行整理时,逐步使用了这个概念。在文献中,可能最早的描述是D u t c h 的论述:接口设计和功能分配是软件设计的主要内容,这些工作的完成和修改要比编码更复杂,0 p d y k e和R o b e r t s 对此给出进一步论述:如果把功能分解到对象中是构造,那么,改变这个功能实现的位置叫重构。他们早期把重构定义为保留行为的程序转换。后来对此加以补充,认为软件重构是使用各种手段重新整理一个对象设计的过程,目的是为了让设计更加灵活,更利于复用,提高软件的可维护性。C a s a i s 把面向对象系统的进化过程划分成四种,分别是:(1)T a i l o r i n g:对类定义进行的微小处理,如:重命名,重新定义属性,访问权限的变化等;(2)S u r g e r y:从程序中增加或删除实体,包括:增加或删除类、增加或删除属性等。(3)V e r s i o n i n g:记录系统中每个实体变化的轨迹;(4)R e o r g a n i z a t i o n:对类库进行大的改变,在此过程中,程序员可以试探着改变设计。他认为,重构应该支持所有这四种行为,只有V e r s i o n i n g 可能例外。1 3 2簟构的定义一M a r t i nF o w l e r 把重构定义为两种形式:一种是名词形式R e f a c t o r i n g:在不改变程序可观察行为的前提下,对程序内部结构改善的过程,目的是使它更易于理解,并且能够更廉价地进行改善。另一种是动词形式R e f a c t o r-通过应用一系列对代码进行处理的手段和步骤,重新构造一个软件。北京邮电大学硕士论文设计模式和重构的研究与应用1 3 3重构的优点1)改善软件设计。很多方法学认为通过分析和设计的严格化就能产生更高质量的软件。然而,这仅仅是理论,实际上是不可能的。一方面是由于分析和设计一个领域的应用程序需要对该领域丰富的知识,而这种知识不是在一开始都能获得的。通常需要在实践反馈的过程中才能逐渐加深自己对该领域的理解。于是,一开始的设计可能并不能正确反映系统的内在本质,所以也不可能在代码中得到很好的反映。另一方面,即使一开始的设计是完好的,随着用户对系统使用的深入,新的需求可能会被加入,旧的需求会被修改、删除。一个最先的设计不可能完全预料到这些变化。2)增进软件可理解性,加速开发。清晰的代码是很好的注释。软件重构可以把复杂结构的程序简单化,不但能够增加代码的易理解性,而且也容易学习他人的编程方法,利用快速地开发软件。3)利于调试。软件调试中最困难和最费时间的工作是定位错误。重构使得程序的结构更清晰,程序员可以集中关注专一的数据和行为。b u g 有时隐藏在系统中一些非常微妙的地方,清理设计和代码使b u g 被带到明处。4)增加灵活性。重构能通往更简单的设计而不牺牲灵活性,使设计过程更简单,而且不再那么强调过程。1 4 虚拟实验系统1 4 1背景目前,我国有很多高校在积极有效地开展着远程教育,他们开发了许多多媒体教育资源,提供了许多功能,比如学习论坛、作业系统、答疑系统、考试系统等等。但是实验教育一直是远程教育中一个相对薄弱的环节。实验是教学活动中一个必不可少的环节,尤其是对于电工电子类等实践性很强的专业,实验教学环节更是至关重要。学生只有通过足够的验证实验和一定数量的综合性实验,才能真正理解和掌握该学科的理论知识,才能获得一定的实验能力。电类课程涉及通信与信息工程、自动化、计算机、信息与通信工程、电气工程及自动化、测控技术与仪器、计算机科学与技术以及交通工程等几乎所有理工科专业。针对电类课程的实验环节,我们北京邮电大学网络教育技术研究所针对6北京邮电大学硕士论文设计模式和重构的研究与应用电路分析、电路与信号和数字电路三门课程先后开发了相应的虚拟实验系统。同时为了更好地满足不同用户的需要,所开发的虚拟实验系统被分为网络版和单机版两个版本。现已被北京邮电大学、华北电力大学、江西理工大学等高校使用。1 4 2介绍数字电路虚拟实验系统实验平台主要由以下三部分组成:器材栏:提供完成数字电路实验所需的各种器材。属性栏:提供实验区中选定器材属性的设置。另外,对于部分复杂器材,还提供相应的操作旋钮或按钮。实验区:用户在此区域,选择特定器材,搭建实验电路,完成实验。童降 捌 1、枧莳酾;玉置*零骖o o I 一黪蔓0。t?j图l 一1 数字电路虚拟实验系统实验平台系统的总体设计主要采用M V C(M o d e l V i e w C o n t r o l l e r),即模型、视图、控制器。其中:C o n t r o l l e r(控制器)负责处理用户命令以及程序事件;M o d e l(模型)负责维护数据并提供数据访问方法;V i e w(视图)负责数据的显示。具体地,它们在本系统中的责职如下:模型,用来记录数据和实现一些与操作没有过多关系的功能函数,负责提供具体的数据操作接口和算法的功能实现以及处理控制器不能处理的信息。视图,负责绘制,提供给用户绘制的接口,并用来表示器材以及各种操作在北京邮电大学硕士论文设计模式和重构的研究与应用界面产生的影响。控制器,负责处理鼠标以及键盘的输入消息,同时调用模型和视图提供的接口来修改具体的数据和绘制信息。1 5 本文工作本文力图完成如下两方面的工作:对常用设计模式进行研究,并分析其在虚拟实验系统中的应用。对重构的原则、特征和方法进行研究,并分析其在虚拟实验系统中的应用。北京邮电大学硕士论文设计模式和重构的研究与应用第二章设计模式2 1A d a p t e r(对象适配器)模式2 1 1对象适配器模式的要素1)意图将一个类的接口转换成客户希望的另外一个接口。2 1 适用性想使用一个已经存在的类,而它的接口不符合你的需求。想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。3)结构图2-1 对象适配器模式的结构4)参与者T a r g e t定义C l i e n t 使用的与特定领域相关的接口。C l i e n t与符合T a r g e t 接口的对象协同。A d a p t e e定义一个已经存在的接口,这个接口需要适配。A d a p t e r对A d a p t e e 的接口与T a r g e t 接口进行适配。5)效果允许一个A d a p t e r 与多个A d a p t e e,即A d a p t e e 本身以及它的所有子类(如9北京邮电大学硕士论文设计模式和重构的研究与应用果有子类的话)同时工作。A d a p t e r 也可以一次给所有的A d a p t e e 添加功能。使得重定义A d a p t e e 的行为比较困难。这就需要生成A d a p t e e 的子类并且使得A d a p t e r 引用这个子类而不是引用A d a p t e e 本身。2 1 2对象适配器模式在系统中的应用1)背景在虚拟实验系统中,器材的属性栏由各种按钮、文本框、编辑框和数字调节钮等组成。M F C 提供了所需的各种基本控件,如:C B u t t o n、C S t a t i c、C E d i t 和C S p i n B u t t o n C t r l 等。直接利用M F C 提供的这些基类,当然也可以完成现有的功能。但存在如下问题:这些基类提供的部分方法,并非完全符合客户的使用习惯。可移植性差。如果要跨平台或者使用别的库提供的相应控件,相应代码需要进行全新的编写。2)应用基于上述需求,系统中采用了对象适配器模式。在虚拟实验系统中,类W i d g e t P l a i n 用于创建属性栏对话框中所需的各控件,并提供了针对各控件的若干操作。以文本框和数字调节钮(S p i nb u t t o n)为例。图2-2 对象适配器模式在系统中应用的类图示例在这里,类W i d g e t P l a i n 可看作A d a p t e r。提供了贴近客户使用习惯的接口。3)效果提供了更加友好的使用接口。增强了代码的可移植性和扩展性。1 0ir蕊百f北京邮电大学硕士论文设计模式和重构的研究与应用2 2B u i l d e r(生成器)模式2 2 1生成器模式的要素1)意图将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2)适用性当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。当构造过程必须允许被构造的对象有不同的表示时。3)结构图2-3 生成器模式的结构4)参与者jB u i l d e r为创建一个P r o d u c t 对象的各个部件指定抽象接口。C o n c r e t e B u i l d e r实现B u i l d e r 的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示。提供一个检索产品的接口。D i r e c t o r构造一个使用B u i l d e r 接口的对象。P r o d u c t表示被构造的复杂对象。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。5)效果它使你可以改变一个产品的内部表示。B u i l d e r 对象提供给导向器一个构北京邮电大学硕士论文设计模式和重构的研究与应用造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了该产品是如何装配的。它将构造代码和表示代码分开。它使你可对构造过程进行更精细的控制。B u i l d e r 模式与一下子就生成产品的创建型模式不同,它是在导向者的控制下一步一步构造产品的。仅当该产品完成时导向者才从生成器中取回它。2 2 2生成器模式在系统中的应用1 1背景在虚拟实验系统中,不同的器材对应有不同的属性栏。其页数不同,每一页的结构组成也不同,如图2-4 所示。薏蜒I 鳓蠢翩:纛一一一一,。一二一一名瓣叵二电阻值臣堑口Q填写范围:1-9”9 9 9 9 9=:一,。t 搿I J _ _ _ _ l 图2-4 虚拟实验系统中电源和电阻的属性栏2)应用基于上述需求,系统中采用了生成器模式。图2-5 生成器模式在系统中应用的类图示例P r o p e r t y P a g e O n e、P r o p e r t y P a g e T w o 和P r o p e r t y P a g e T h r e e 分别代表不同组成结构的属性页。P r o p e r t y C o m 负责通过P r o p e 啊P a g e O n e、P r o p e r t y P a g e T w o 和P r o p e n y P a g e T h r e e 的特定组合从而形成不同类型的属性栏。3)效果将属性栏的构造与其具体属性页的实现分开。在改变特定属性页的结构1 2北京邮电大学硕士论文设计模式和重构的研究与应用组成时,不影响蓟属性栏的构造过程。如此,可以灵活地修改和组合属性页。2 3C h a i no fR e s p o n s i b i l i t y(职责链)模式2 3 1职责链模式的要素1)意图使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。2 1适用性有多个对象可以处理一个请求,哪个对象处理该请求运行时可自动确定。想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。可处理一个请求的对象集合应该动态指定。3)结构图2-6 职责链模式的结构4)参与者H a n d l e r定义一个处理请求的接口。C o n c r e t e H a n d l e r处理它所负责的请求。可访问它的后继者。如果可处理该请求,就处理之;否则将该请求转发给它的后继者。C l i e n t向链上的具体处理者对象提交请求。5)效果降低耦合度。北京邮电大学硕士论文设计模式和重构的研究与应用该模式使得一个对象无需知道是其他哪一个对象处理其请求。对象仅需知道请求会被“正确地处理。接收者和发送者都没有对方的明确的信息,且链中的对象不需知道链的结构。结果是,职责链可简化对象的相互连接。它们仅需保持一个指向其后继者的引用,而不需要保持它所有的候选接受者的引用。增强了给对象指派职责的灵活性。当在对象中分派职责时,职责链给你更多的灵活性。你可以通过在运行时刻对该链进行动态的增加或修改来增加或改变处理一个请求的那些职责。你可以将这种机制与静态的特例化处理对象的继承机制结合起来使用。不保证被接受。一个请求可能一直到链的末端都得不到处理。一个请求也可能因该链没有被正确配置而得不到处理。2 3 2职责链模式在系统中的应用1)背景虚拟实验系统的总体设计主要采用M V C(M o d e l V i e w-C o n t r o l l e r)模式。在本系统中,对控制器C o n t r o l l e r 进行了扩展。就拿鼠标控制器(M o u s e C o n t r o l l e r)来说,系统中将其划分为默认控制器(C D e f a u l t C o n t r o l l e r)、添加器材控制器(C A d d C o m p e n t C o n t r o l e r)、移动器材控制器(C M o v e C o m C o n t r o l l e r)和连线控制器(C C o n T h r e a d C o n t r o l l e r)等。上述控制器接收特定的鼠标事件,并进行不同的处理操作。对于同一个鼠标事件,比如单击鼠标左键,各控制器也有不同的处理。具体地,如果是在器材栏中单击鼠标左键,选择欲添加器材,然后再在实验区单击鼠标左键,完成器材的添加,这种情况下,是调用添加器材控制器;如果在实验区已有的器材所在位置单击鼠标左键,选中器材,这种情况下,则是调用移动器材控制器。2)应用当系统接收鼠标事件时,并不关心该事件到底应该由哪个控制器来处理。而每个控制器都有可能去接收该鼠标事件并作一定的处理。于是,在本系统中,采用了职责链模式。这里将各控制器的“链式 关系交由控制器管理器(C o n t r o l l e r M n g)来管理,而不是让控制器本身去决定“链条”中它的后继者(s u C c e s s o r)即下一个控制器是什么。控制器管理器中将默认控制器作为“链条”的首部,其余控制器(添加器材控制器、移动器材控制器和连线控制器)为其后继,这些控制器之间并没有明确的“链式”关系。1 4北京邮电大学硕士论文设计模式和重构的研究与应用E n g i n e、lC o n b o l l e r M n g4 1 d o U p d a t e 0|n a n d l e E v e n t OiM o u s e C o n t r o l l e r=c a n H a n d l b E v e n t()n 协I!()h a n d l e E v e n t 0 g e t C o m M n g O c r e a t e C o m p o n e n t(C o m p o n e n t:C 一7 4 L S 0 0);|北京邮电大学硕士论文设计模式和重构的研究与应用节点、;C o m p o n e n t 幸n o dl=e x p-g e t C o m M n 9 0 c r e a t e C o m p o n e n t(C o m p o n e n t:C O M M O N _ N O D E);e l el m _ r e g i o n2E g o:E g o _ R e c t(x-3 0-n o d e l-r e _ w i d t h 2,y+c 7 4 1 s 0 0 一 m _ h e i g h t 2,x-3 0+n o d

    注意事项

    本文(设计模式和重构的研究与应用.pdf)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开