




已阅读5页,还剩61页未读, 继续免费阅读
(计算机软件与理论专业论文)observer模式研究及实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子科技大学硕士论文:o b s e r v e r 模式研究及实现 摘要 介绍了设计模式的概念,面向对象开发中程序员更重视代码的重用 性和可维护性,设计模式使人们可以更加简单方便地重复使用成功的 设计和体系结构。设计模式是经验的文档化。它是对被用来在特定场 景下解决一般设计问题的类和相互通信的对象的描述,是一个问题解 决方案对。 设计模式在j a v a 的中型系统中应用广泛,遵循一定的编程模式,才 能使自己的代码便于理解,易于交流,分析了一种常见的模式一观察 者模式。o b s e r v e r ( 观察者) 模式是比较常用的一个模式,尤其在界面设计 中应用广泛。 c 牟作为一种先进的现代的面向对象语言,不但吸收了许多语言的 精华,并创造了一些非常有用的新特性。利用n e t 框架中的代理( d e l e g a t e ) 和事件( e v e n t ) 技术可以实现o b s e r v e r 模式。代理和事件是实现灵活而 且强大应用程序的有力工具,使用它实现o b s e r v e r 模式,可以有效的减 少开发的难度和工作量。 从实例中分析o b s e r v e r 的应用,并给出了观察者模式的传统的实 现方法,并分析了它的缺点。在本文的实例中,需要实现一个实时绘图 程序,直观地观察股票价格等指数随时间变化,绘制各种图表,在实时 绘图结构中,股票数据就是被观察目标,而图表就是观察者。为此, 首先构造可扩展的图表组件,图表具有很直观的视觉效果,可以方便 的用来比较数据的差异、图案和趋势等。从外观上来看,常用到的图 表主要有散点图、( 折) 曲线图、柱状图等。进行实时绘图首先讨论这几 神图形样式。 利用j 2 e e 框架中的o b s e r v a b l e 类和o b s e r v e r 接口实现观察者模 式( 实时绘图程序) ,并利用n e t 框架中的代理和事件技术对观察者模 式进行了改进,实现同样功能的实时绘图程序,利用l o a d r u n n e r 测试工 其测试两个绘图程序的性能,对比o b s e r v e r 模式在j 2 e e 和n e t 框架 中的性能,从而简化了程序的开发难度和出现错误的概率,提高了系统 的灵活性。 关键字:模式设计、o b s e r v e r 模式、可扩展图表组件、实时绘图、j 2 e e 框架、n e t 框架、软件测试、l o a d r u n n e r 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 a b s t r a c t i n t r o d u c et h ec o n c e p to fd e s i g np a t t e r n s ,i n0 b j e c to r i e n t e ds o f t w a r e d e s i g n ,p r o g r a m m e r sp a ym o r ea t t e n t i o nt oc o d er e u s ea n dm a i n t e n a n c e d e s i g np a t t e r n sh e l p su st o r e u s et h es u c c e s s f u l d e s i g ne x p e r i e n c ea n d s y s l e ms t r u c t u r em o r ec o n v e n i e n t l ya n dm o r es i m p l y d e s i g np a t t e r ni s a f i l eo ft h ee x p e r i e n c e i ti su s e dt o d e s c r i p tt h ec l a s sa n dt h et a r g e tt h a t c o m m u n i c a t ew i t he a c ho t h e ri ns p e c i f ies c c n e ,i ti sap r o b l e m s o l u t i o n m e t h o d d e s i g np a t t e r n si su s e de x t e n s i v l yi nt h em e d i u m s i z e ds y s t e mo f j a v a , f o l l o wac e r t a i nd e s i g nm o d e ,w ec o u l dm a k et h ec o d ee a s yt ou n d e r s t a n d , e a s yt oc o m m u n i c a t e ,i nt h ee s s a y ,w ea n a l y s i sak i n do fc o m m o nd e s i g n p a t t e r n o b s e r v e rp a t t e r n o b s e r v e rp a t t e r n i sa c o m m o n l y u s e d p a t t e r n ,e s p e c i a l l yu s e di ni n t e r f a c ed e s i g n c 撑a so n ek i n d o fa d v a n c e d o b j e c t o r i e n t e d l a n g u a g e n o to n l y a b s o r b e dt h eq u i n t e s s e n c eo fal o to fla n g u a g e s ,b u ta l s oc r e a t e ds o m e v e r yu s e f u ln e wc h a r a c t e r i s t i c s w i t hd e l e g a t ea n de v e n tt e c h n o l o g yw e c a nr e a l i z eo b s e r v e rp a t t e r n d e l e g a t ea n de v e n ta r et h es t r o n gt o o l s w h i c hr e a l i z e st h ef l e x i b l ea n ds t r o n ga p p l i c a t i o np r o g r a m ,w ec a nr e d u c e t h ed i f f i c u l t yo ft h ew o r k a n a l y s e t h e a p p l i c a t i o n o fo b s e r 、e rf r o mt h e i n s t a n c e ,p r o v i d e o b s e r v e r st r a d i t i o n a li m p l e m e n t a t i o nm e t h o da n dg i v ei t ss h o r t c o m i n g i n t h ei n s t a n c eo ft h i se s s a y ,n e e dt or e a l i z ear e a l t i m em a p p i n gp r o g r a m , o b s e r v ev a r i o u sk i n d sd a t e s ,s u c ha st h es t o c kp r i c e ,e t c i nt h i sm o d e ,t h e s t o c kd a t aa r eo b s e r v e dg o a l s ,a n dt h ec h a r ti st h eo b s e r v e r t h ec h a r th a s v e r yo c u l a rv i s u a le f f e c t s ,f r o ma p p e a r a n c ec o m ew a t c h ,i th a s ( r o l lo v e r ) c u r v eg r a p h ,b l o c kd i a g r a m ,e t c c a r r y0 nr e a l t i m em a p p i n gw ed i s c u s s t h e s ek i n d so fc h a r t sf i r s t p r e s e n t sat r a d i t i o n a l i m p l e m e n t a t i o n o fo b s e r v e r p a t t e r n ,a n d a n a l y s e si t sd e f e c t s f i n a l l y ,i m p r o v e st h ep a t t e r nb ym e a n so fd e l e g a t e a n de v e n ti nt h e n e tf r a m m e w o r k ,w h i c hg r e a t l yr e d u c e st h ed i f f i c u l t i e s a n de r r o r si nt h ed e v e l o p m e n tp r o c e s s ,a n de n h a n c e st h e f l e x i b i l i t yo f t h es y s t e m 。 k e y w o r d s :d e s i g np a t t e r n s 、o b s e r v e rp a t t e r n 、e x t e n s i b l e c h a r t 、 r e a l t i m em a p p i n g 、j 2 e e 、n e t 、l o a d r u n n e r i i 独创性声明 本人声明所里交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均己在论文中作了明 确的说明并表示谢意。 签名:墨蠹 缢日期:弘。f 年f 月佣 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 虢避新龇妄笙 日期:如蟹一年j 月,日 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 1 1 软件设计模式介绍 第一章绪论 在开发给定项目的过程中,通常会使用设计模式概念来解决与应 用程序设计和结构有关的某些问题。在各种设计( 建筑、机械、软件等) 中,经验是非常重要的,好的经验可以指导工作,节约时间;而坏的经验则 可以给我们以借鉴,从而减少失败的风险。但是经验仅仅是工作的积累 很难被记录和传授。软件设计模式模式是指在一卜特定的背景下,反复 出现问题的解决方案,它是经验的文档化。 模式( p a t t e r n ) 的概念最早由建筑大师c h r i s t o p h e r a l e x a n d e r 于二十 世纪七十年代提出,他说:“每一个模式描述了一个在我们周围不断重 复发生的问题,以及该问题的解决方案的核心,这样你就能一次又一次 地使用该方案而不必做重复劳动”,他使用模式这一概念来解决建筑中 的一些问题,现在这一概念逐渐被计算机科学所采纳。八十年代中期由 w a r dc u n n i n g h a m 和k e n tb e c k 将其思想引入到软件领域,软件开发中 模式的概念现在已经得到了广泛的应用,涉及到分析、设计、体系结构、 编码、测试、重构等软件生命周期中的各个方面。 软件模式的应用对软件开发产生了重大的作用,主要表现在:软 件模式是人们在长期的设计软件、管理组织软件开发等实践中大量经 验的提炼和抽象,是复用软件设计方法、过程管理经验的有力工具。 模式类似于拳击中的组合拳,它提供了一系列软件开发中的思维套路。 如,通过模式的使用,有利于在复杂的系统中产生简洁、精巧的设计。 软件模式为我们提供了一套简洁通用的设计、管理、组织方面的 词汇,同时模式也为我们提供了一个描述抽象事物的规范标准,可大 大促进软件开发过程中人与人之间的交流,而软件开发中的交流是至 关重要的,“软件项目失败的原因最终都可追溯到信息没有及时准确地 传递到应该接收它的人”。 虽然设计模式并不是万能钥匙,但它是一个非常强大的工具开 发人员或架构师可使用它积极地参与任何开发项目。设计模式可确保 通过熟知和公认的解决方案解决常见问题。 模式存在的事实基础在于:大多数问题其他个人或开发小组可能 已经遇到并解决了。因此,模式提供了种在开发人员和组织之间共 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 享可使用的解决方案的机制。无论这些模式的出处是什么,这些模式 都利用了大家所积累的知识和经验。这可确保更快地开发正确的代码, 并降低在设计或实现中出现错误的可能性。 此外,设计模式在工程小组成员之间提供了通用的语义。参加过 大型开发项目的人员都知道,使用一组共同的设计术语和准则对成功 完成项目来说是至关重要的。最重要的是,设计模式可以节省大量的 时间。 1 2 软件模式的描述、分类与特点 1 2 1 模式的四个基本要素 模式名称( p a t t e r nn a m e ) 模式名称是一个助记名,它用一两个词来描述模式的问题、解决 方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允 许我们在较高的抽象层次上进行设计。基于一个模式词汇表,我们自 己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可 以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到 恰当的模式名也是我们设计模式编目工作的难点之。 问题( p r o b l e m ) 问题描述了应该在何时使用模式。它解释了设计问题和问题存在 的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法 等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部 分会包括使用模式必须满足的系列先决条件。 解决方案f s o l u t i o n ) 解决方案描述了设计的组成成分,它们之间的相互关系及各自的 职责和协作方式。因为模式就像一个模板,可应用于多种不同场合, 所以解决方案并不描述个特定而具体的设计或实现,而是提供设计 问题的抽象描述和怎样用一个具有般意义的元素组合( 类或对象组 合、来解决这个问题。 效果( c o n s e q u e n c e s ) 效果描述了模式应用的效果及使用模式应权衡的问题。尽管描述 设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解 使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计 的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植 性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。 1 2 2 软件模式的描述 从前面可以看出,模式是一个高度抽象的概念。模式的描述分以 下几个部分: 模式名及分类:模式名称简洁地描述了模式的本质,一个好的名 字非常重要。 问题( p r o b l e m ) 或意图:在特定的周境和动机下要达到的目标。通 常情况下这些动机和目标是相互矛盾相互影响的。 周境:问题及其解决方案产生时的前提条件。周境告诉该模式的 适用性,可以将周境视为应用该模式之前的系统初始配置。 动机:描述相关的动机和约束,它们之间或与期望的达到的目标 之间的相互作用( 或冲突) ,通常需要对各期望的目标进行优先级排序。 动机阐明了问题的复杂性,定义了在相互冲突时所采取的各种权衡手 段。一个好的模式应尽可能将所有产生影响的动机考虑在内。 解决方案:是一些静态的关系和动态的规则,用以描述如何得到 所需的结果。通常是给出一组指令来说明如何构造所需的工作制品。 该说明可包括图表、文字,用以标示模式的结构、参与者及其之间的 协作,从而表明问题是如何解决的。 示例:一个或多个该模式的应用例子。示例说明了模式在怎样的 初始周境下,如何发生作用,如何改变周境而导致结果周境的出现。 示例帮助读者理解模式的具体使用方法。 结果周境( r e s u l t i n gc o n t e x t ) :指:在应用该模式后系统的状态或配 置,包括模式发生作用后带来的后果,以及在新的周境下产生的问题、 可应用的模式等。它阐述了模式的后续状态和副作用。通常通过对结 果周境的描述,使该模式与其它模式联系起来( 该模式的结果周境成为 其它模式的初始周境) 。 基本原理( r a t i o n a l ) :对该模式中的解决步骤或采用的规则的解释、 证明,解释该模式如何、为何能解决当前问题,它采用的方法为何能 得到与期望相一致的结果。 相关模式:该模式与其它模式的关系,包括静态的或动态的。如, 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 该模式的前导模式( 前导模式应用后产生的结果周境与该模式的初始 周境一致) ,后续模式( 该模式应用后产生的结果周境与后续模式的初始 周境一致) ,替代模式( 使用该模式的替代模式产生同样的效果) 等。 已知应用:阐述该模式在已有应用系统中的实际应用情况,有助 于验证该模式的有效性。 1 2 3 软件模式的分类 软件模式主要可分为:设计模式、分析模式、组织和过程模式等, 每一类又可细分为若干个子类。在此着重介绍设计模式,目前它的使 用最为广泛。 设计模式:设计模式主要用于得到简洁灵活的系统设计,e r i c h g a m m a 等人将设计模式按其解决问题的不同分为三种:创建型、结构 型和行为型三种。通常情况下,设计模式均基于面向对象技术而提出, 也可应用于接口定义良好的结构化方法中。 创建型模式:该类型模式是对对象实例化过程的抽象,它通过采 用抽象类所定义的接口,封装了系统中对象如何创建、组合等信息。 创建型模式可以帮助一个系统独立于如何创建,谁创建,创建什 么。它可以改变以前通过n e wc l a s s ( ) 这种硬编码方式转移为一个独立 的行为集。因此这些行为可以实现复用,组合,使用创建对象的过程 易于修改,维护,扩展。 创建模式可以分为类的创建模式和对象的创建模式。类的创建模 式使用继承关系,把类的创建延迟到子类,从而封装了客户端将得到 哪些具体类的信息;而对象的创建则是把对象的创建过程动态的委派 给另一个对象,从而动态的决定客户端将得到哪些具体的类实例,以 及这些类的实例是如何被创建和组合在一起。 随着系统演化得越来越依赖于对象复合而不是类继承,创建型模 式变得更为重要。当这种情况发生时,重心从对一组固定行为得硬编 码转移为定义一个较小的基本行为集,这些行为可以被组合成任意数 目的更为复杂的行为。这样创建有特定行为的对象要求的不仅仅是实 例化一个类。 创建型模式中有两个不断出现的主旋律。第一,它们都将关于该 系统使用哪些具体的类的信息封装起来。第二,它们隐藏了这些类的 实例是如何被创建和放在一起的。整个系统关于这些对象所知道的是 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 由抽象类所定义的接口。因此,创建型模式在什么被创建,谁创建它, 它是怎样被创建的,以及何时创建这些方面给予你很大的灵活性。它 们允许你使用结构和功能差别很大的“产品”对象配置一个系统。配 置可以是静态的( 即在编译时指定) ,也可以是动态的( 在运行时) 。 结构型模式:该类模式主要用于如何组合已有的类和对象以获得 更大的结构,一般借鉴封装、代理、( 多) 继承等概念将一个或多个类或 对象进行组合、封装,以提供统一的外部视图或新的功能。结构型模 式涉及到如何组合类和对象以获得更大的结构。结构型模式采用继承 机制来组合接口或实现。 一个简单的例子是采用多重继承方法将两个以上的类组合成个 类,结果这个类包含了所有父类的性质。这一模式尤其有助于多仓独 立开发的类库协同工作。 结构型对象模式不是对接口和实现进行组合,面是描述了如何对 一些对象进行组合,从而实现新功能的一些方法。因为可以在运行时 刻改变对象组合关系,所以对象组合方式具有更大的灵活性,而这种 机制用静态类组合是不可能实现的。 行为模式:该类模式主要用于对象之间职责及其提供的服务的分 配,它不仅描述对象或类的模式,还描述它们之间的通信模式,特别 是描述一组对等的对象怎样相互协作以完成其中任对象都无法单独 完成的任务。这些模式刻画了在运行时难以跟踪的复杂的控制流。它 们将你的注意力从控制流转移到对象问的联系方式上来。 行为类模式使用继承机制在类间分派行为。行为对象模式使用对 象复合而不是继承。一些行为对象模式描述了一组对等的对象怎样相 互协作以完成其中任一个对象都无法单独完成的任务。一个重要的问 题是对等的对象如何了解对方。对等对象可以保持显式的对对方的引 用,但那会增加它们的耦台度。在极端的情况下,每一个对象都要了 解所有其他的对象。 组织和过程模式:在软件项目实施过程中,人们就如何有效地进行 项目计划、风险和成本控制、人员组织协调、进度跟踪和激励、质量 控制等积累了丰富的经验,组织和过程模式就是这些经验的凝结。如 冲刺( s p r i n t ) 模式,解决在开发人员尽量免受外界干扰、有高生产率的 情况下,开发组能保持正确的工作目标,同时可及时响应需求的变化 等比较棘手的问题。 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 表1 1 给出了常见的2 3 种设计模式。 表1 1 设计模式 日的设计模式可变的部分 创建 a b s t r a c tf a c t o r y产品对象家旋 b u j 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 】j t y何时、怎样满足一个请求 模式 c o m m a n d一个语言的文法及解释 j n l e r p r e t e r如何遍历、访问一个聚合的各元素 t e r a t o r 对象间怎样交互、和谁交互 m e d i a t o r 一个对象中哪些私有信息存放在该 m e l l l e n t o 对象之外,以及在什么时候进行存储 多个对象依赖于另外一个对象,而这 o b s e r v e r 些对象又如何保持一致 对象的状态 s t a l 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 作,但不修改这些对象的类 a b s t r a c tf a c t o r y :提供一个创建一系列相关或相互依赖对象的接 6 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 口,而无需指定它们具体的类。 a d a p t e r :将一个类的接口转换成客户希望的另外一个接口。 adapter 模式使得原本由于接口不兼容面不能一起工作的那些类可 以一起工作。 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 :为子系统中的一组接口提供个一致的界面,facade 模式定义了个高层接口,这个接口使得这子系统更加容易使用。 f a c t o r ym e t h o d :定义一个用于创建对象的接口,让子类决定将哪 一个类实例化。f a c t o r y m 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 模式研究及实现 状态。 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 :表示个作用于某对象结构中的各元素的操作。它使你 可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 1 2 4 软件设计模式的特点 设计模式是( 面向对象) 设计经验的凝结,有以下特点: 设计模式侧重于系统动态行为特征的分析和抽象。设计模式更侧 重于对象组合而不是继承。如今软件系统的演化越来越依赖于对象复 合而不是类继承,继承常被认为破坏了封装性( 子类揭示了父类的实现 细节,其实现与父类有紧密的依赖关系) 基于对象组合可使类的层次和 数量减少,从而设计更为简洁,可扩展性好。 设计模式为类继承中的层次划- 分提供指导。面向对象设计中类的 层次划分至关重要,类可分为哪几个层次,哪些方法、属性应该在哪 个层次引入等等。类的层次划分过少将导致设计的封装性差,过多则 导致程序笨重而失去可维护性、可调整性、可扩展性。设计模式从系 统动态行为特征的角度,将类之间的相互作用进行分层包装,在此基 础上合理分配各方法属性。 程序员都知道良好程序的个基本标准:高聚合,低耦台。面向 对象语言比结构化语言要复杂的多,不良或者没有充分考虑的设计将 8 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 会导致软件重新设计和开发。然而实际的设计过程中,设计人员更多 的考虑如何解决业务问题,对于软件内部结构考虑较少;设计模式则 补充了这个缺陷,它主要考虑如何减少对象之间的依赖性,降低祸合 程度,使得系统更易于扩展,提高了对象可复用性。因此,设计人员 正确的使用设计模式就可以优化系统内部的结构。 1 2 5 软件设计模式与框架的比较 与设计模式非常相近的一个概念是框架( f r a m e w o r k ) 。框架 ( f r a m e w o r k ) 是整个或部分系统的可重用设计,表现为一组抽象构件及 构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制 的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。 可以说,一个框架是一个可复用的设计构件,它规定了应用的体 系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控 制流程,表现为组抽象类以及其实例之间协作的方法,它为构件复 用提供了上下文( c o n t e x t ) 关系。因此构件库的大规模重用也需要框架。 构件领域框架方法在很大程度上借鉴了硬件技术发展的成就,它 是构件技术、软件体系结构研究和应用软件开发三者发展结合的产物。 在很多情况下,框架通常以构件库的形式出现,但构件库只是框架的 一个重要部分。框架的关键还在于框架内对象间的交互模式和控制流 模式。 框架比构件可定制性强。在某种程度上,将构件和框架看成两个 不同但彼此协作的技术或许更好。框架为构件提供重用的环境,为构 件处理错误、交换数据及激活操作提供了标准的方法。 应用框架的概念也很简单。它并不是包含构件应用程序的小片程 序,而是实现了某应用领域通用完备功能( 除去特殊应用的部分) 的底层 服务。使用这种框架的编程人员可以在一个通用功能已经实现的基础 上开始具体的系统开发。框架提供了所有应用期望的默认行为的类集 合。具体的应用通过重写子类( 该子类属于框架的默认行为) 或组装对象 来支持应用专用的行为。 应用框架强调的是软件的设计重用性和系统的可扩充性,以缩短大 型应用软件系统的开发周期,提高开发质量。与传统的基于类库的面 向对象重用技术比较,应用框架更注重于面向专业领域的软件重用。 应用框架具有领域相关性,构件根据框架进行复合而生成可运行的系 统。框架的粒度越大,其中包含的领域知识就更加完整。 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 框架、设计模式这两个概念总容易被混淆,其实它们之间还是有 区别的。构件通常是代码重用,而设计模式是设计重用,框架则介于 两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软 件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用 的抽象块:代码重用,即将通用模块组合成库或工具集,以便在多个应 用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现 成的基础结构,以获得最高级别的重用性。 框架与设计模式虽然相似,但却:有着根本的不同。设计模式是对 在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框 架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而 言只有实例才能用代码表示:设计模式是比框架更小的元素,一个框架 中往往含有一个或多个设计模式,框架总是针对某一特定应用领域, 但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式 是软件的知识。 软件框架是个可复用的小型体系结构似r c h j t e c t u r e ) ,在一个给定 的范畴内为一族软件抽象产物( a b s t r a c t i o n s ) 提供通用的结构和行为。通 常情况下,框架不是一个完整的应用系统,它规定了应用系统的体系 结构,并提供一系列固定的插口和配置点供使用者将其客户化 ( c u s t o m i z a t i o n ) 后生成所需的应用软件。e r i c hg a m m a 认为,设计模式 与框架有以下区别: 设计模式比框架更抽象。框架可以通过代码形式来具体实现或表 达,但模式则不然,只有模式的实例才可具体化为代码;框架的个 好处是它可采用编程语言写出来,然后不仅可以运行而且可以直接复 用,相反,设计模式在每次应用时须将其实现,而且设计模式还说明 了意图,权衡和设计导致的后果。 框架可以认为是一个适用于某个领域的软件包。这个软件包提供 了相应领域的各个问题的解决方法。设计模式和框架针对的问题域不 同:设计模式针对面向对象的问题域;框架针对特定业务的问题域。 设计模式比框架更为抽象:设计模式在碰到具体问题后,才能产生代 码;框架已经可以用代码表示。设计模式是比框架更小的体系结构元 素,框架中可以包括多个设计模式。 设计模式是比框架更小的结构型元素。一个典型的框架包含了若 干设计模式,反之则不然。较之于框架,设计模式的应用更为广泛。 框架通常有一个特定的应用领域,而设计模式则几乎可适用于任何应 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 用类型。 1 3 使用设计模式改善程序结构 设计模式是对特定问题经过无数次经验总结后提出的能够解决它 的优雅的方案。但是,如果想要真正使设计模式发挥最大作用,能够 在自己的设计中正确、恰当的使用设计模式。从另一个角度( 设计模式 的意图、动机) 来看待设计模式,设计模式会变得非常贴近你的设计过 程,并且能够指导、简化你的设计,最终将会导出一个优秀的解决方 案。 在进行项目的开发中,有一些设计在项目开始工作的很好,但是 随着项目的进展,发现需要对已有的代码进行修改或者扩展,导致这 样做的原因主要有:新的功能需求的需要以及对系统进一步理解。在 这个时候,往往会发现进行这项工作比较困难,即使能完成也要付出 很大的代价。此时,一个必须要做的工作就是要对现有的代码进行重 构f r e f a c t o r i n g ) ,通过重构使得接下来的工作变得相对容易。 重构就是在不改变软件系统代码的外部行为的前提下,改善它的 内部结构。重构的目标就是使代码结构更加合理,富有弹性,能够适 应新的需求、新的变化。对于特定问题给出优美解决方案的设计模式 往往会成为重构的目标,而且一旦能够识别出能够解决问题的设计模 式,将会大大简化我们的工作,因为可以重用别人已经做过的工作。 但是在原始设计和最终可能会适用于我们的设计模式间的过渡并不是 平滑的,而是有个间隙。这样的结果就是:即使已经知道了很多的 设计模式,面对实际问题,我们也没有一个有效的方法去判断哪一个 设计模式适用于我们的系统,我们应该去怎样应用它。 造成上述问题的原因往往是由于过于注重设计模式所给出的解决 方案这个结果,而对于设计模式的意图,以及它产生的动机却忽略了。 然而,正是设计模式的意图、动机促使人们给出了一个解决一类问题 的方案这个结果,设计模式的动机、意图体现了该模式的形成思路, 所以更加贴近实际问题,从而会有效的指导重构历程。 结构化的方法是以具体的功能为核心来组织程序的结构,它的封 装度仅为1 级,即仅有对于特定的功能的封装( 函数) 。这使得结构化的 方法很难适应需求的变化,面向对象的方法正是在这点上优于结构 化的方法。在面向对象领域,是以对象来组成程序结构的,一个对象 有自己的职责,通过对象间的交互来完成系统的功能,这使得它的封 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 装度至少为2 级,即封装了为完成自己职责的方法和数据。另外面向 对象的方法还支持更高层次的封装,比如:通过对于不同的具体对象 的共同的概念行为进行插述,我们可以达到3 级的封装度抽象的类 ( 在j a v a 中就是接口) 。封装的层次越高,抽象的层次就越高,使得设 计、代码有越高的弹性,越容易适应变化。 使用设计模式可以为软件设计带:来很多好处: 1 ) 设计模式为开发者提供了好的设计经验,模式中所描述的解决 方案是人们从不同角度对一个问题进行研究,然后得出来最通用、最 灵活的解决方案,其有效性已经在很多设计中得到证实,其中蕴涵了 有经验的程序员的设计经验。将经过验证的技术表述为模式可以使新 系统的开发者更容易理解,并且以过去成功的开发经验指导当前的软 件开发,避免传统上靠一次试验而导致的失误。 2 ) 设计模式为项目之间、程序员之间重用面相对象代码提供一种 方便的途径,使得重用成功设计和结构更加容易。每个模式都是软件 设计中的可重用元素,个熟悉设计模式的设计者可以在其设计中直 接应用模式,而无需重新设计和开发它们。一个没有经验的程序员也 可借助于设计模式提高设计水平。多个模式可以组合起来构成完整的 系统,这种基于模式的设计具有更大的灵活性、可扩展性和更好的可 重用性。同时,基于模式的设计还能够加快设计的速度,并提高开发 队伍的生产力和软件的质量。 3 ) 模式为程序员提供了共同的词汇。当一个模式被写出来,它就 可以在程序员之间讨论,这使得程序员可以更好地合作和分享他们的 智慧,也可以避免讨论问题时的歧义。 4 ) 设计模式的基本思想是将程序中可能变化的部分与不变的部分 分离,尽量减少对象之间的耦合,当某些对象发生变化时,不会导致 其他对象都发生变化。为了实现这个目标,模式中一个常见的方法是 在类或对象间增加一个中间类或对象,这样做的结果不仅使得代码更 容易扩展和维护,而且也令程序更容易读懂。 5 ) 通过明确地表述类和对象的关系和意图,设计模式甚至可以改 进现有系统的文档和维护。可以说,设计模式帮助设计者更快更好地 设计。很显然,设计模式不是简单地写出来的,而是被发现的,这个 发现过程被称为“模式发掘”。所有结构良好的面向对象软件体系结 构中都包含了许多模式,发掘其中的模式需要开发者有丰富的设计经 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 验,而识别已有软件中的设计模式将有助于在设计中使用模式和发现 模式。 解决同一个问题一般会有多种方寨或者模式,但是这些模式所关 注的是同一个问题的不同方面,每一种模式总是希望解决某一类软件 设计问题,一个模式均有其目的,研究每个模式的目的,然后找出与实际 问题相关的一个或多个软件设计模式及其使用模式。同时,很多模式之 间总是相互补充,因此必须研究模式之间的相互关联,弄清设计模式之 间的关系,对寻找合适的模式或模式组具有指导作用。此外,对一个实际 问题,必须考虑到设计中那些是可变的,而这些变化是否会引起系统必 须重新设计,然后找出相关的模式以尽量避免引起重新设计。这是从微 观上选择设计模式的方法,它要求设计人员对各种模式有比较清楚的理 解和掌握。 e r i c h g a m m a 给出了一个使用设计模式的循序渐进的方法: 1 ) 理解所选择的模式注意模式的适用条件和模式使用效果,确定 该模式是否适台要解决的实际问题。 2 ) 研究模式的结构、组成以及它们之间如何协作,这将确保设计人 员理解这个模式的类、对象以及其他的关联关系。 3 ) 选择模式参与者的名字,使它们:茁具体应用中有意义。 4 ) 定义类,声明它们之间的接口,建立它们的继承关系,定义代表数 据和对象引用的实例变量。 5 ) 定义模式中专用于应用的操作名称,名字一般依赖于应用,使用 的名字必须一致。 6 ) 实现执行模式中责任和协作的操作。 电子科技大学硕士论文:o b s e r v e r 模式研究及实现 第二章观察者( o b s e r v e r ) 模式 2 1 观察者模式简介 面向对象的开发的个主导原则是,在给定的应用程序中正确地 分配任务。系统中的每个对象应该将重点放在问题域中的离散抽象上, 而不是放在任何其它方面。简而言之,一个对象只应做一件事,而且 要将它做好。这种方法可确保在对象之间划定清晰的界限,因而可提 供更高的重用性和系统可维护性。 一个正确划分任务特别重要的领域就是,用户界面和基础业务逻 辑之间的交互。在应用程序的开发过程中,需要快速更改用户界面要 求,并且不会对应用程序的其他部分产生连带影响,这是司空见惯的 事。此外,业务要求也可能会发生变化,而这一切与用户界面无关。 具有丰富开发经验的人都知道,在很多情况下,这两组要求都会发生 变化。如果没有划分u i 和应用程序其他部分,修改任一部分都会对 整体造成不利的影响。 很多应用程序都会遇到以下常见问题:需要在用户界面和业务逻 辑之间划分清晰的界限。因此,自g u i 出现以后开发的很多面向对象 的框架均支持将用户界面从应用程序的其他部分中划分出来。其中的 大部分应用程序采用类似的设计模式来提供此功能。这种模式通常称 为观察者,它在系统中的各种对象之间划分清晰的界限方面非常有利。 o b s e r v e r 模式是行为模式中的一种,它定义了种对象间的一对多 的依赖关系,当一个对象的状态改变时,所有依赖于它的对象都得到通 知并进行自动更新。 在o b s e r v e r 模式中涉及到两个或多个对象,我们称之为s u b j e c t 和 o b s e r v e r 。作为o b s e r v e r 的对象,能够自动监视到s u b j e e t 某个特定的状 态变化,并对变化做出反应。 如当一个数据库中的数据改变时,用户视图中的数据显示也随之改 变。对于一个s u b j e c t 来说,可以由多个o b s e r v e r 依赖于它。 通过o b s e r v e r 模式,我们可以减低软件设计中模块之间的耦合程度。 增强软件中类和对象的可复用性。对o b s e r v e r 这种设计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《新编商务应用文写作》第九章 习题及参考答案
- 纪念屈原课文讲解课件
- 纪念刘和真君课文课件
- 农村电商合作运营合同书
- 2025年瑞典语等级考试九级写作与翻译试题
- 农业信息化及智慧农业建设协议
- 南通如皋七下数学试卷
- 皮小欣做数学试卷
- 宁波广东中考数学试卷
- 约客课件教学课件
- 房屋租赁投诉管理制度
- T/JSWP 01-2021政策类决策社会稳定风险评估规范
- T/CBMCA 006-2018生态多孔纤维棉
- 引水工程可行性研究报告
- 压力管道安全培训
- 公司安全员培训课件
- 《高中生职业生涯规划指导》课件
- 政务服务智能化:DeepSeek在政务系统中的场景化落地
- 培训师自我评价
- 中国儿童严重过敏反应诊断与治疗建议
- 炉窑安全管理制度
评论
0/150
提交评论