(计算机软件与理论专业论文)设计模式实现的研究与应用.pdf_第1页
(计算机软件与理论专业论文)设计模式实现的研究与应用.pdf_第2页
(计算机软件与理论专业论文)设计模式实现的研究与应用.pdf_第3页
(计算机软件与理论专业论文)设计模式实现的研究与应用.pdf_第4页
(计算机软件与理论专业论文)设计模式实现的研究与应用.pdf_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 设计模式是在设计面向对象软件过程中知识和经验的记录。它用一系列类 结构和对象行为来具体描述其含义,并且在这样一个预先定义的设计结构基础 上根据具体应用来完成设计。设计模式的目的就是复用这些面向对象软件设计 的成功解决方案以便于这些抽象解决方案的积累和交流。作为软件复用方法中 的重要研究方向,设计模式能有效的解决软件设计中的可扩展性和可维护性等 问题。 尽管设计模式本身并不要求一定用某种语言来实现,但脱离了具体的实现, 就无法真正理解设计模式,而且很多技术可以简化设计模式的实现。因此,本 文对创建型模式和行为型模式的具体实现进行了深入分析,对两种模式类型存 在的缺点分别利用高级程序设计语言中的反射机制和委托机制进行改进,并通 过抽象工厂模式和观察者模式分析改进后的效果。 文章最后以远程作业系统为背景,详细阐述了如何利用改进的抽象工厂模 式与缓存结合来设计系统的数据访问层,以满足系统对异类数据源的要求。并 针对系统开发中一些不好的解决方案,总结了一个名为对象状态硬编码于判断 逻辑中的反模式,提出一个利用状态模式改进的解决方案,并结合系统的用户 管理模块进行阐述。同时,利用改造的状态模式对系统中作业布置这一重要功 能进行设计。将模式的思想应用于系统的设计过程中,使得系统更加灵活,易 于扩展。 关键词:设计模式;作业系统;抽象工厂模式;状态模式 a b s t r a c t a bs t r a c t d e s i g np a t t e r n sa r et h ek n o w l e d g ea n de x p e r i e n c er e g i s t e r i n gi nt h ep r o c e s so f t h ed e s i g no fo b j e c t - o r i e n t e ds o f t w a r e i td e s c r i b e st h em e a n i n g so fd e s i g np a t t e r n s c o n c r e t e l yb yas e r i e so fc l a s ss t r u c t u r ea n do b j e c t i nt h eb a s eo ft h ed e s i g ns t r u c t u r e w h i c hi sd e f i n e db e f o r e h a n d ,i ta c c o m p l i s h e st h em a t e r i a ld e s i g nf r o mt h es p e d a l a p p l i c a t i o n t h eg o a lo fd e s i g np a t t e r n s i sr e u s et h es o l v i n gs c h e m eo ft h e s e o b j e c t - o r i e n t e ds o f t w a r ed e s i g n ss ot h a tw ec a na c h i e v et h ea c c u m u l a t i o na n d c o m m u n i c a t i o no ft h e s ea b s t r a c ts o l v i n gs c h e m e s a sa ni m p o r t a n tr e s e a r c ha r e ao f s o f t w a r er e u s e ,d e s i g np a t t e r n sc a nb ea ne f f e c t i v es o l u t i o nt ot h ed e s i g no ft h e s o f t w a r es c a l a b i l i t ya n dm a i n t a i n a b i l i t y f o ra l lt h ea c h i e v e m e n to fd e s i g np a t t e r n sd o e s n tn e e dak i n do fs o f t w a r ed e s i g n l a n g u a g e s ,b u tw i t h o u ti tw ec a nn o tu n d e r s t a n dd e s i g np a t t e r n s ,a n ds o m et e c h n o l o g y d e s i g n e dt os i m p l i f yt h ep a t t e r n st oa c h i e v e s oi nt h i sp a p e r w ea n a l y s i st h e c r e a t i o n a lp a t t e r n sa n db e h a v i o r a lp a t t e r n si n - d e p t h ,t h e nu s et h er e f l e c t i o na n d d e l e g a t e m e c h a n i s mo f h i g h - l e v e lp r o g r a m m i n gl a n g u a g e t o i m p r o v e t h e s h o r t c o m i n g so ft w ot y p e s ,a n da n a l y s i st h ee f f e c tt h r o u g ht h ea b s t r a c tf a c t o r yp a t t e r n a n do b s e r v e r p a t t e r n f i n a l l y , t h ea r t i c l eu s e sar e m o t ee x e r c i s es y s t e mf o rb a c k g r o u n d t om e e tt h e s y s t e mr e q u i r e m e n t so fh e t e r o g e n e o u sd a t as o u r c e s ,w ed e s c r i b e dh o w t od e s i g nt h e d a t aa c c e s sl a y e ro fs y s t e m ,w h i c hw a su s e dt h ei m p r o v e da b s t r a c tf a c t o r yp a t t e r n w i t ht h ec a c h e f o rs o m eb a ds o l u t i o n si ns y s t e m ,w es u m m e du pa na n t i - p a t t e r n k n o w na st h eo b j e c ts t a t eh a r d c o d e di nj u d g e1 0 9 i c a n db r i n gu pa ni d e at h a tu s e s t a t ep a t t e r nt oi m p r o v et h es o l u t i o n ,c o m b i n e dw i t hu s e rm a n a g e m e n tm o d u l ei nt h e s y s t e mt od e s c r i b e i nt h em e a n w h i l e ,w eu s et h ei m p r o v e ds t a t ep a t t e r nt od e s i g nt h e i m p o r t a n tf u n c t i o no fw o r ka r r a n g e m e n ti ns y s t e m t h eu s eo fp a t t e r ni nt h ep r o c e s s o fs y s t e md e s i g n ,m a k i n gt h es y s t e mm o r ef l e x i b l e ,e a s y - t oe x p a n d k e yw o r d s :d e s i g np a t t e r n ;e x e r c i s es y s t e m ;a b s t r a c tf a c t o r yp a t t e r n ;s t a t ep a t t e r n 学位论文独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。掘我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他入已经发表或撰写过的研究成果,也不包含 为获得+ 南昌大学或其他教育机构的学位或证书而使用过的材料。与 我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确 的说明并表示谢意。 、 r 一、 学位论文作者签名( 手写) :互琴支签字日期:硝年9 - 月2 7 日 学位论文版权使用授权书 本学位论文作者完全了解直昌态堂有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。_ 本人授权直昌太堂可以将学位论文的全 部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描 等复制手段保存、汇编本学位论文。同时授权中国科学技术信息研究 所将本学位论文收录到中国学位论文全文数据库,并通过网络向 社会公众提供信息服务。 ( 保密的学位论文在解密后适用本授权书) 学位论文作者签名:立虿爻导师签名: 铡耘 签字日期:函菇车p 月爿日 签字日期:良“年p 月2 7 日 第1 章引言 第1 章引言 1 1 研究背景及意义 随着计算机应用技术和软件开发技术的发展,人们对软件的要求不断提高, 软件系统的规模性和复杂性急剧增长,复杂程度的加深使得软件中的各种问题 远远超出了软件开发人员所能控制的范围,这些问题主要表现为软件开发进度 难以控制、软件质量靠不住、软件修改与维护比较困难,这就爆发了2 0 世纪6 0 年代所谓的软件危机【蚴。为了解决这r 系列的问题,专家学者们一直在探索解 决危机的途径和方法,普遍认为软件复用i l 叫是解决这一危机的有效途径。 软件复用概念是m c l l r o y 在其论文( m a s sp r o d u c e ds o f t w a r ec o m p o n e n t s ) 中提出来的。通常情况下,应用软件系统得开发过程包含以下几个阶段:需求 分析、设计、编码、测试、维护等。当每个应用系统的开发都从头开始时,其 中必然存在大量的重复劳动。而软件复用是在软件开发中避免重复劳动的解决 方案,其出发点是软件系统的开发不再采用一切“从零开始”的模式,而是在 已有的工作基础上,充分利用过去应用系统开发中积累的知识和经验,即软件 复用是把软件生命周期中各阶段的成果作为可重用的部件,也就是说,软件复 用是领域知识、领域模型、软件需求说明、概要设计、功能模块、测试用例、 测试结果等可复用部件的复用。 软件复用对于软件开发有着重要的意义。在软件开发中使用可复用的软件 构件可以降低软件的开发成本,同时,由于可复用构件经过严格的测试,所以 还可以降低软件的维护成本;使用经过严格测试的可复用构件,可以提高软件 的开发质量,增强软件产品的竞争力;可重用构件的使用还可以提高软件的开 发效率,缩短软件开发周期。然而,在软件复用技术的发展过程中,虽然有很 多复用技术的研究成果和复用技术的实践活动。但是,复用技术在整体上对软 件产业的影响却并不尽如人意。这是由于技术方面和非技术方面的种种因素造 成的,而技术上的不成熟是主要的原因。随着面向对象技术的发展成熟并逐渐 成为主流技术,为软件复用提供了基本的技术支持,软件复用研究重新成为热 点,被视为解决软件危机、提高软件生产效率和质量的现实可行的途径1 5 j 。 虽然面向对象技术的发展已经非常成熟,但是我们必须清楚的看到,设计 面向对象软件比较困难,而设计可复用的面向对象软件就更加困难1 6 j 。尤其是在 第l 章引言 设计规模性、复杂性都较大的软件系统时,如何有效地满足各种非功能性属性, 如:可维护性、可扩展性、可测试性、可复用性等属性,是每个软件设计者必 须考虑的问题。 而设计模式【锚】的出现,在某种程度上解决了这些问题。软件设计模式提供 了一种业已证明的通用问题的解决方案【9 】,因此,它是经过测试的、健壮的解决 方法。设计模式因能提供相对对象更高层次的可复用的优势而成为软件工程领 域又一具有里程碑意义的软件开发新技术。相对而言,面向对象思想使用离散 的对象构建软件系统,而设计模式利用对象的继承、组合等技术,站在比传统 的面向对象开发方法更高的层次上考虑问题,并因此得到更大的复用粒度。将 设计模式应用于软件设计中,不仅带来了代码复用,更重要的是带来了高层次 的设计复用,从而有利于设计的实现并能提高软件开发效率和质量,对于工程 实践具有很好的现实指导意义。 1 2 设计模式的研究现状 软件设计模式的研究可以追溯到2 0 世纪8 0 年代末,一些研究人员使用当 时流行的面向对象语言s m a l l t a l k 6 l 和m v c 模式i n l 3 j 来设计用户界面,但是由于 s m a l l t a l k 语言的应用规模较小和模式本身的局限性,并没有引起软件界的广泛 重视。 1 9 9 5 年,由g a m m a 、h e l m 、j o h n s o n 和v l i s s i d e s 四人( g a n go ff o u r 以下 简称g o f ) 合著的经典著作 d e s i g np a t t e r n s :e l e m e n t so fr e u s a b l eo b j e c t o r i e n t e d s o f t w a r e ) ) 问世,引起了当时国外软件工程界对书中所提的设计模式的极大关注, 并被广泛应用于众多领域的软件构造和设计、开发处理和组织中,设计模式已 经成为软件工程领域的重要研究内容,国内外对于设计模式相关方面的研究有 很多,主要有以下几个方面: ( 1 ) 新设计模式的发现 每年国际上都举办包括p l o p ( p a t t e r nl a n g u a g e so fp r o g r a m ) 、e c o o p ( e u r o p e a nc o n f e r e n c eo no b j e c t o r i e n t e dp r o g r a m m i n g ) 等在内的学术会议对设 计模式进行讨论【1 4 l 。特定领域是模式的一个潜在的广阔领域,如在大规模商业 系统中关联对象的商业模式【1 5 】,在油气勘探应用领域,适合应用领域需求的并行 设计模式的研究,如叠前深度偏移s p m d 计算模式,虚拟共享网络模式等,这 2 第l 章引言 些模式可以作为面向对象并行应用框架设计的基础,以达到简化并行软件开发 过程,缩短开发周期,提高运行功效的目的【1 6 1 。 ( 2 ) 模式库的建立 有效地复用模式首先需要有效地组织和管理模式,需要建立相应的模式入 库方法和检索方法旧,建造一个可以有效地支持高质量软件开发的真正成熟的 模式系纠1 8 l 。如文献 1 9 1 在设计模式的形式化描述基础上,提出了从设计模式库 中进行设计模式自动获取的基于谓词匹配的设计模式选取算法,并基于x m l 等 技术构造了一个模式系统。 ( 3 ) 设计模式自动化开发方法与工具的研究 越来越多的研究者正在着手开发模式工具,如软件开发环境f a c e ( f r a m e w o r ka d a p t i v ec o m p o s i t i o ne n v i r o n m e n t ,框架自适应组合环境) 2 0 】等。其 他人正在研究如何建造针对特殊模式的预制代码框架库【2 。国内的研究如在文 献 2 2 1 中以l e p u s 语言为基础,提出了一个支持设计模式的c a s e 工具原型模 型,支持设计模式代码框架的自动生成。所有这些方法的目标是为模式和模式 使用自动化提供c a s e 工具支持。 ( 4 ) 设计模式的形式化 模式形式化可以更准确的描述模式的结构、动态性和具体语义,可以更好 的支持模式工具的开发。从总体上看,国内对设计模式形式化的研究较少团】。 文献【2 4 1 中提出利用角色模型、类型模型、类模型和d i s c o 语言规范相结合的 描述方法,旨在提高描述的精确性和克服不同描述语言的缺陷。文献 2 5 q a 利用 超图模型对设计模式进行初步描述。文献【2 6 】研究了设计模式“结构”的形式化, 并提出了“层次 概念。 国外学者对设计模式形式化的研究关注程度较高,并且已经发展成为软件 工程中的一个研究热点。文献 2 7 1 提出设计模式定义和应用的一种形式化方法。 他使用抽象数据视图a d v ( a b s t r a c td a t av i e w ) 和抽象数据对象a d o ( a b s t r a c t d a t ao b j e c t ) 来描述一个模式的类方案。它包含了a d v 、a d o 以及它们之间的关 系。这种方法缺乏将模式说明成一个设计组件,模式接口也没有涉及。文献 2 8 】 提出l e p u s 形式化语言,以用于设计模式的规格说明和自动化应用,它主要集 中表现模式的内部,而不是模式与其它设计的交互。文献【2 9 】描述了d i s c o 形式 化语言,主要用来描述交互系统。 ( 5 ) 设计模式的应用 3 第1 章引言 将经典的设计模式、经过组合或者改造的设计模式应用到具体的软件开发 中,以改进系统某些方面的性斛刈。在模式组合方面有采用u m l 及其扩展机制 表示的用于支持设计模式组合方法的三个模型:模式级模型、带接口的模式级 模型、细化的模式级模型1 3 1 。 设计模式是近年来在计算机软件工程领域所取得的重大成就之一。设计模 式思想已经作为一种思维方式引入到软件工程中。作为一种设计级的复用手段, 它比复用现有的构件更加抽象、适用范围更广,并且在实际操作中更加切实可 行,因此成为当今学术界和工业界研究与应用的热点。 1 3 论文的研究内容及论文组织 本文介绍了模式、设计模式的基本概念,分析了设计模式与算法、程序设 计语言的关系,介绍了对失败方案的总结即反模式的概念。分析比较了设计模 式与面向对象应用框架、软件体系结构的关系。总结了设计模式在软件开发中 模式的选取和使用方法,以及应用设计模式时应注意的问题。在此基础上,主 要完成了以下工作: ( 1 ) 设计模式具体实现的研究。分析了创建型模式和行为型模式两种模式类 型在实现上的一些缺点,并提出了改进的方法。对创建型模式利用高级程序设 计语言中的运行期间类型识别即反射机制进行改进,并以抽象工厂模式为例进 行阐述,进一步提高了模式的灵活性。对行为型模式的缺点利用了n e t 框架中的 委托机制进行改进,并结合观察者模式进行分析,减少了模式中类的层次关系。 ( 2 ) 以远程作业系统为背景,从系统的实际需求出发,具体介绍了设计模式 如何应用于系统设计的过程。详细阐述了如何利用改进的抽象工厂模式进行设 计和实现系统的数据访问层,以满足系统对异类数据源的要求,提高了系统的 可扩展性。针对系统开发中一些不好的解决方案,总结了一个名为对象状态硬 编码于判断逻辑中的反模式,提出一个利用状态模式改进的解决方案,并结合 系统的用户管理模块进行阐述。同时,利用改造的状态模式对系统中作业布置 这一重要功能进行设计,使得系统在编码过程中更加灵活、方便。 本文共分为五章,具体安排如下: 第1 章引言介绍了论文的研究背景及意义,设计模式的研究现状和论文 的主要研究内容。 4 第1 章引言 第2 章设计模式及相关概念介绍了设计模式的基本概念,分析了设计模 式和算法、程序设计语言之间的关系。分析比较了设计模式和面向对象应用框 架、软件体系结构的关系。最后总结了设计模式在软件开发中模式的选取、使 用的方法,并分析了应用设计模式应注意的问题。 第3 章设计模式实现的研究分析了创建型模式和行为型模式在具体实现 时的一些缺点,并分别利用反射机制和委托机制进行改进,以抽象工厂模式和 观察者模式为例分别进行说明。 第4 章设计模式在远程作业系统中的应用介绍了系统的设计方案,并具 体阐述了改进的抽象工厂模式和状态模式在系统中的应用。 第5 章结论与展望总结了本文的工作,指出了本文工作中的不足,并指 出了下一步研究工作的设想。 5 第2 章设计模式及相关概念 第2 章设计模式及相关概念 设计模式在基于面向对象的软件开发中是一个热门的话题,它是专家对面 向对象软件设计经验的总结,使得广大软件开发人员可以更加简单方便地复用 成功的设计和体系结构,避免设计损害了系统的复用性。本章简要的介绍设计 模式的一些基本概念,分析了设计模式与面向对象应用框架、软件体系结构之 间的关系,并分析研究了设计模式在软件开发中模式的选取和使用方法,以及 应用设计模式应注意的问题。 2 1 模式 模式有助于我们利用熟练的软件工程师的集体经验来构建软件。它们捕捉 软件开发中现存的、经过充分考验的经验,再用于促进好的设计实践。每个模 式处理一个软件系统的设计或实现中重复出现的问题。 2 1 1 模式的概念 模式的概念起源于建筑学领域,建筑学家c h r i s t o p h e r a l e x a n d e r 在他的著作 ap a t t e r nl a n g u a g e ) ) 中给出了模式的定义:“每一个模式描述了一个在我们周 围不断重复发生的问题,以及改问题的解决方案的核心。这样,你就能一次又 一次地使用该方案而不必做重复的劳动1 6 1 。在c h r i s t o p h e ra l e x a n d e r 另外一本 著作n et i m e l e s sw a yo fb u i l d i n g ) ) 中,作者通过描述如何构造庭院以阐述模 式的思想【3 2 1 。尽管a l e x a n d e r 所指的是城市和建筑模式,但他的思想也同样适用 面向对象设计模式,只是在面向对象的解决方案里,我们用对象和接口代替了 墙壁和门窗。两类模式的核心都在于提供了相关问题的解决方案。从定义不难 发现,模式关注的是从特定的一对 【3 3 l 中进行抽象并提炼出公共要素。 模式不仅仅是问题之解,因为问题的出现往往伴随着特定的场景和条件, 相应得求解过程应包含多种结构,在给定场景的情况下使之均衡这些场景和条 件。 并不是每个好的解决方案都能称为模式,一个模式应该做到: ( 1 ) 解决反复出现的问题:模式捕捉了反复出现的问题的解,而不仅仅是 抽象的原则和策略。 6 第2 章设计模式及相关概念 ( 2 ) 是经过验证的概念:模式并不仅是理论和思索,而是反映了经过实践 检验的重复出现的问题的解得本质。 ( 3 ) 解决方案并不是显而易见的:很多问题求解技术( 如软件设计范型和 方法) 是从出事的软件工程原则中导出解。好的模式应该是间接的产生问题的 解,这是解决复杂、困难设计问题的必然方法。 2 1 2 模式的基本要素 一般而言,模式有以下四个基本要素1 6 】: 1 、模式名称:它用一两个词来描述模式的问题、解决方案和效果。基于一 个模式词汇表,可以很方便的交流和讨论模式并在编写文档时使用它们。 2 、问题:描述了应该在何时使用模式。它解释了设计问题和问题存在的前 因后果,他可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描 述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须 满足的一系列先决条件。 3 、解决方案:描述了设计的组成成分,它们之间的相互关系以及各自的职 责和协作方式。因为模式就像一个模板,可以应用于多种不同场合,所以解决 方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和 怎样用一个具有一般意义的元素组合来解决这个问题。 4 、效果:描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述 设计决策时,并不总体到模式效果,但它们对于评价设计选择和理解使用模式 的代价及好处有着重要的意义。软件效果大多关注对时间和空间的衡量,它们 也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效 果包括它对系统的灵活性、扩充性、和可移植性的影响,显式的列出这些效果 对理解和评价这些模式很有帮助。 2 1 3 模式的类别 对现有模式的更进一步的观察揭示它们包含各种范围的度量和抽象。有些 模式有助于把一个软件系统分解成子系统。另一些模式支持子系统和组件的细 化或它们之间关系得细化。其它模式有助于实现特定编程语言中的特殊设计方 面。模式的范围也从与领域无关模式,比如去藕交互组件模式,遍及到关注特 定领域的模式,如商业应用中的交易策略或电信中的呼叫路1 3 4 1 。 7 第2 章设计模式及相关概念 从模式的起源我们可以看出,模式并不为软件独有。即使在软件范畴,设 计模式也不是模式的全部。如面向对象大师m a r t i nf o w l e r 的( a n a l y s i sp a t t e r n ) , 该书描述了一种分析模式,用于系统领域建模的一种模式。提交给p l o p ( p a t t e r n l a n g u a g eo fp r o g r a m m i n g ) 会议的模式包括了软件工程生命周期的各个方面:开 发组织、软件过程、项目计划、需求工程、软件配置管理等。 根据不同的抽象层次,模式可分为体系结构模式( a r c h i t e c t u r a lp a t t e r n s ) 、 设计模式( d e s i g np a t t e r n s ) 、惯用法( i d i o m s ) 3 4 1 ,其定义如下: ( 1 ) 体系结构模式:描述了一个软件系统的基础组织结构,它提供了一组 预定义的子系统,指定了各自的责任,并且包含了组成子系统之间相互关系的 规则和指南。体系结构模式提供了软件系统体系结构的模板,它指出了系统级 别上的应用程序的结构特性,对应用系统的子系统结构具有指导意义。它能帮 助我们对系统进行合理的分解。相关的模式有:层( l a y e r s ) 模式,管道过滤器 ( p i p e sa n df i l t e r s ) 模式和黑板( b l a c k b o a r d ) 模式等。 ( 2 ) 设计模式:提供了一种细化软件系统中子系统或组件以及它们之间相 互关系的策略。它描述了在某一特定场景下求解某一类普遍性问题的经常使用 的相关组件结构。设计模式提供了复杂功能组件分解的结构模式。 ( 3 ) 惯用法:是一种与特定编程语言相关的低层次模式,它描述了如何使 用编程语言中提供的特性实现组件及其相关部分的具体内容。 以上三种模式不同之处在于它们各自的抽象级别和对系统细节描述程度的 差别。体系结构模式采用对系统高度抽象的策略,涉及较大范围的系统组件以 及整体的属性和机制,这种模式将对一个软件系统的整体框架结构产生较大的 影响;设计模式则是中等规模的设计策略,描述了系统中某些具体的结构和行 为以及它们之间的关系,它们并不对系统体系结构产生影响,惯用法或者称为 程序模式则是一种示例性的、依赖于某种编程语言表示的编程技巧,经常使用 于具体低级和内部组件和结构的实现【3 5 1 。每一种类别的模式都具有相似规模或 抽象程度的模式组成。 2 2 设计模式 2 2 1 设计模式的定义 软件的设计分析是一种艺术,存在较多的主观性和创造性,需要大量的实 8 第2 章设计模式及相关概念 践和个人灵感。就面向对象设计而言,可以满足当前需求的设计肯定不只一种: 可能存在多种类的划分、交互,它们都可以是对的,但不一定都是好的。有些 设计可能给日后维护、升级、复用带来重大的麻烦。每次力图创造好的设计都 对设计者提出了过高的要求,另一方面对于相似问题的重复设计也是对资源的 浪费。设计模式试图减少设计中的艺术成分,加重其中的工程成分。设计模式 确定了所包含的类和实例、它们的角色、协作坊式和自责分配。每个人的出发 点不同,对模式的理解也会不同。随着设计模式的发展,出现了诸多设计模式 的定义闭: 1 、著名模式专家r i c h a r dg a b r i e l 认为:一个模式是一个特定上下文、一系 列驱动力( 经常在该上下文中重复) 、个特定软件设置的三元组。 2 、p r e e 在1 9 9 4 年提出:设计模式制定一套规则来描述如何在软件开发领 域完成任务。 3 、g o f 在1 9 9 5 年提出:设计模式是对被用来在特定场景下解决一般设计 问题的类和相互通信的对象的描述。 4 、b u s c h m a n n 等在1 9 9 6 年提出:模式描述在特定环境下重复出现的设计模 式及其解决方案。 在众多定义中,有一个共同点,即特定上下文环境下,问题与解决方案对 的重复出现。 2 2 2 设计模式的描述 a l e x a n d e r 认为“我们定义的每个模式必须按一定的形式表述,这种形式建 立了上下文、系统约束和配置之间的关系,使得上下文中满足系统约束。目 前存在几种不同描述模式的形式,a l e x a n d e r 的著作中使用的表述形式称为 a l e x a n d e r 模式,在g o f 中使用的称为g o f 模式。虽然各种表述形式上有差异, 但一般认为模式应该由下面这些部分组成: ( 1 ) 模式名称 一个有意义的名称,使得我们可以用一个词或短语来代表某个模式、相关 知识和结构。好的名称形成了讨论抽象概念时的共有词汇。 ( 2 ) 问题 在给定的初始上下文和约束下,模式要实现的目标。在g o f 型中没有严格 区分问题和初始上下文的区别。事实上完全严格的区分是困难的,因为我们解 9 第2 章设计模式及相关概念 决的问题必然是在一个上下文中的。 ( 3 ) 初始上下文 问题和解决方案重现的前提,这个部分告诉我们模式的可用性。它可以被 认为是应用模式以前的系统的状态。 ( 4 ) 约束 相关的约束和它们之间的相互作业,以及我们要达到的目标。约束揭示了 问题的错综复杂并指出了在相互冲突的约束中必须进行权衡。好的模式应该包 含所有对系统有影响的约束。 ( 5 ) 解决方案 描述如何实现目标的静态关系和动态规则。通过图形、图表、文字等描述 模式的结构、参与者、协作,以显示问题是如何被解决的。解决方案不只描述 静态结构也描述动态行为。静态结构告诉我们模式的形式和组织,但通常是动 态行为使得模式产生效果。解决方案的描述可以指出一些具体实现模式的建议。 模式的某些变形也可能在这里讨论。 g o f 模式中解决方案分成结构、参与者、协作。结构以类图的方式描述了 模式的静态部分:参与者以文字的方式说明参与者的作用;协作采用u m l 的顺 序图描述模式的动态规则。 ( 6 ) 例子 一个或多个次模式应用的例子:特定的初始上下文,模式是如何应用于此 上下文中的。例子帮助读者理解模式的使用方法和可用性。例子可能包括某种 实现方式。 ( 7 ) 结果上下文 模式应用后系统得状态或配置,它描述模式的结果要求和一些副作用。有 时也被称为约束的解决。因为它描述哪些约束被解决了,哪些没有被解决,现 在可以继续应用什么模式。 ( 8 ) 原理 从局部和整体两方面对模式进行解释,说明此模式如何用特定的方式解决 约束。它解释了约束集是如何协调的,告诉我们模式如何工作,为什么能工作, 为什么它是好的模式。如果说解决方案描述了模式外部结构和行为,那么原理 揭示了表层之下的深层结构和关键机制。 ( 9 ) 相关模式 1 0 第2 章设计模式及相关概念 在相同模式语言中的模式间静态和动态关系。相关模式经常有相同的约束。 它们的初始上下文或结果上下文经常是相关的。 ( 1 0 ) 已知应用 描述现存系统中模式的出现。这显示此模式确实是经常重现问题的证实了 的解决方案。 2 2 3 设计模式的分类 设计模式在粒度和抽象层次上各不相同。由于存在众多的设计模式,所以 必须用一种方法把它们组织起来。在经典的g o f 设计模式中,作者按照两条准 则对2 3 种设计模式进行了分类,如图2 1 所利6 l : 目的 创建型结构型行为型 范叭 类 f a c t o r ym e t h o da d a p t e r ( 类)i n t e r p r e t e r t e m p l a t em e t h o d 对象 a b s t r a c tf a c t o r y a d a p t e r ( 对象) c h a i no fr e s p o n s i b i l i t y b u i l d e r b r i d g e c o m m a n d p r o t o t y p ec o m p o s i t e i t e r a t o r s i n g l e t o n d e c o r a t o r m e d i a t o r f a c a d e m e m e n t o f l y w e i g h t o b s e r v e r p r o x y s t a t e s t r a t e g y v i s i t o r 图2 1 设计模式空间 第一条是目的准则,即模式是用来完成什么工作的。模式根据其目的可分 为创建型( c r e a t i o n a l ) 、结构型( s t r u c t u r a l ) 、行为型( b e h a v i o r a l ) 三种。创 建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对 类或对象怎样交互及怎样分配职责进行描述。 第二条是范围准则,制定模式主要用于类还是对象。类模式处理类和子类 之间的关系,这些关系通过继承建立,是静态的,在编译时便确定下来。对象 模式处理对象间的关系,这些关系在运行时可以变化,更具有动态性。从某种 第2 章设计模式及相关概念 意义来说,几乎所有模式都适用继承机制,“类模式 只指那些集中于处理类 间关系的模式,而大部分模式都属于对象模式的范畴。 创建型类模式将对象的部分创建工作延迟到子类,而创建型对象模式则将 它延迟到另一个对象中。结构型类模式适用继承机制来组合类,而结构型对象 模式则描述了对象的组装方式。行为型类模式适用继承描述算法和控制流,而 行为型对象模式则描述一组对象怎样协作完成单个对象无法完成的任务。 2 2 4 设计模式的特性 d o u gl e a 在他的文章c h r i s t o p h c ra l e x a n d e r :a n i n t r o d u c t i o nf o r o b j e c t o r i e n t e dd e s i g n e r s ) ) 中提出一个模式应该有如下的特性: ( 1 ) 封装和抽象( e n c a p s u l a t i o na n da b s t r a c t i o n ) 每个模式封装了在特定领域中明确定义的问题和它的解决方案。模式应该 提供清晰的边界,通过把问题空间和解空间分解成不同的、不相连的片断,使 得它们变得明确。模式还应该作为体现领域知识和经验的抽象,而且可以出现 在领域中概念粒度不同的层次上。 ( 2 ) 开放性和变化性co p e n n e s sa n dv a r i a b i l i t y ) 每个模式可以被其他模式扩展或参数化,这样它们可以协同工作于更大的 系统。一种模式不应和具体开发工具过分相关,而且可以用不同的方式实现。 ( 3 ) 通用和组装( g e n e r a t i v i t ya n dc o m p o s a b i l i t y ) 每个模式一旦应用可以产生与其它模式的初始上下文相匹配的结果上下 文,这样模式可以一个接一个的应用以产生整体解决方案。“模式通过递增的 方式应用,一个模式的应用提供了另一个模式的初始上下文”。但模式不是简 单的线性叠加,而是在不同的层次间以网状结构交织在一起。 ( 4 ) 平衡( e q u i l i b r i u m ) 每个模式必须在其约束中平衡。这可能是因为一个或多个用于最小化解空 间冲突的不变量和启发信息,不变量通常代表特定领域的潜在问题求解原则, 提供了模式中每个步骤或规则的原理。 每个模式描述了一个整体,这个整体并不是个组成部分的简单叠加。d o u g l e a 关于模式特性的讨论第三点可能有些绝对化。这似乎可以通过简单的一个接 一个的使用模式来构造任意软件系统。在某些特定领域这是可能的,但目前并 没有完备的软件开发模式语言,这将导致在多数领域第三点并不适用。g o f 的 1 2 第2 章设计模式及相关概念 2 3 种模式不构成完备的模式语言,而且g o f 认为也不可能有一个完备的通用的 软件模式语言( g o f 认为对于特定领域这样的模式语言是可能的) 。 2 2 s 设计模式和算法、数据结构之间的关系 设计模式有助于捕获专家的现有知识并使用它来寻找软件设计中再现问题 的解决方案。尽管算法及其数据结构经常同时被用于设计模式的实现过程中, 但算法和数据结构往往被用来解决细粒度的计算问题,例如查找和排序。算法 和数据结构通常比设计模式具有较强的确定性,并且在其实现策略和过程中处 于基本稳定状态。模式则涉及到较为广泛的体系结构因素,并且会引起较大范 围的影响 在模式和算法之间有一种双重关系。一方面,当实例化一个特殊的模式时, 我们必须实现它的参与者的所有服务和它们的协作。有些服务可能比较复杂, 这时算法和数据结构可以为实现这样的服务提供方法。另一方面,设计模式和 惯用法可以支持算法和数结构的实例化。 软件开发人员不仅要发现适当的系统体系结构,而且还要解决具体计算问 题。因此,只有模式、抽象数据结构以及算法的联合使用才能真正帮助软件开 发人员解决实际应用问题。 2 2 6 设计模式与程序设计语言 模式是不依赖于编程语言的【3 7 1 。但是一方面,设计模式依赖于具体程序设 计语言来实现,语言对基本模式集合的选取有直接的影响。程序设计语言可以 直接用特定的语言机制支持某些基本模式,比如在j a v a 的j a v a u t i l 类库里,已经 提供了一个o b s e r v a b l e 类以及一个o b s e r v e r 接口,接口中已经封装了各种方法 以提供对观察者( o b s e r v e r ) 模式的支持。然而也正是缺乏语言强有力的表达机 制,一些模式被复杂化甚至被歪曲的表达出来,如在没有提供垃圾收集机制的 语言中,一些相关的模式,如j a m e sc o p l i e n 的h a n d l e b o d y 模式和e n v e l o p e l e t t e r 模式都是极其复杂的【3 8 】。另一方面,对设计模式的发掘和分析,能够在某种程 度上分析和发现哪些语言结构和机制在程序设计实践中是行之有效的,从而提 出新的语言机制,更好的支持模式的表达。因此设计模式的研究与发掘对程序 设计语言的演化具有现实意义,从设计模式角度研究分析语言结构和表达机制 也可以说是一种创新,涉及模式的分析研究将有助于面向对象程序设计语言的 1 3 第2 章设计模式及相关概念 推陈出新。它可以使软件复用在程序设计语言中被具体体现出来,而专业应用 领域中模式的挖掘与研究则是这一创新意义必须的基础环节。 2 2 7 反模式( a n t i p a t t e r n ) 软件产业要解决的根本问题是如何把商业概念转换为软件应用程序。但是, 对大量软件开发项目的调查结果表明,有将近六分之五的项目被认为是不成功 的,而且大约三分之一的软件项目在开发过程中被撤销掉,剩下的一般也要花 两倍的时间以及超过两倍的预算才能完成。研究这些反复出现的开发失败的教 训以及对失败的解决方案是很有价值的,因为失败的经验告诉人们很多知识, 这些知识是关于在软件开发过程中哪些事情是可以做的哪些事情是不该做的。 反模式的思想就是这些知识的系统总结,它代表了在计算机科学与软件工程思 想体系中的一个革命性的变化【3 9 l 反模式就像设计模式一样,提供了容易表示的模版来描述要讨论的各类问 题。反模式的模板由以下组成:名字、参考模型关键字、背景、迹象、反模式 解决方案、症状和效果、典型原因、重组方案、变化、示例、相关方案。反模 式从软件开发人员、系统设计师和软件管理者三者的认识角度分成三类,即f ( 1 ) 开发反模式:程序开发人员遇到的技术问题和解决方案矿 ( 2 ) 体系结构反模式:识别并解决系统体系结构组织过程中常见的问题。 ( 3 ) 管理反模式:针对软件过程和开发组织中常见的问题。 反模式和设计模式解决问题的方法是不同的,反模式从一个有问题的解决 方案开始,并从这个问题引出可能造成的不良后果以及隐藏在这个问题下面的 其它问题,然后针对这个问题提出一个重组方案以及新方案的好处和效果。文 档化的反模式症状是用于认识一个特定软件问题的决定性线索,一旦反模式能 够被正确识别,其重组后的方案能被用来更好的解决软件问题。 2 - 3 设计模式与面向对象应用框架 2 3 1 面向对象应用框架 g o f 给出的面向对象软件框架的定义:框架【删是一组合作的类,它们组成 某领域的一种可重用的设计。框架通过把设计分解为抽象类并定义他们的责任 和交互,从而提供软件体系结构的指导,开发者通过子类和实例化框架类来达 1 4 第2 章设计模式及相关概念 到把框架应用于具体项目的目的1 6 j 。 面向对象应用框架技术已经被证明是一种降低软件开发费用和提高软件开 发质量的有效手段之一,它的优势来自于方法本身的模块化( m o d u l a r i t y ) ,复 用性( r e u s a b i l i t y ) ,可扩展性( e x t e n s i b i l i t y ) 和反向控制机制( i n v e r s i o no fc o n t r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论