(计算机应用技术专业论文)aop在设计模式实现中的应用研究.pdf_第1页
(计算机应用技术专业论文)aop在设计模式实现中的应用研究.pdf_第2页
(计算机应用技术专业论文)aop在设计模式实现中的应用研究.pdf_第3页
(计算机应用技术专业论文)aop在设计模式实现中的应用研究.pdf_第4页
(计算机应用技术专业论文)aop在设计模式实现中的应用研究.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

(计算机应用技术专业论文)aop在设计模式实现中的应用研究.pdf.pdf 免费下载

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

文档简介

摘要 摘要 软件设计模式代表了从成功的系统设计中分离出来的可复用的 优秀设计经验,已成为现代软件系统设计的重要研究对象。虽然设计 模式有利于软件的重用,但当设计模式实例化时,存在模式的重叠、可 追踪性以及模式代码难于复用等问题。面向方面的程序设计方法 ( a o p ,a s p e c t o r i e n t e dp r o g r a m m i n g ) 可以有效地描述o o p ( o b j e c t o r i e n t e dp r o g r a m m i n g ) 方法不能描述的横切关注点,并 能很好的将系统中模式实现的代码封装在一个独立的模块中,从而 使得程序的模块化程度和可复用性得到改善。 本文基于面向方面程序设计的基本思想,将g o f 的2 3 个设计模 式作为实现的目标,分析了各个设计模式用a o p 实现的可能性。对各 个设计模式用a o p 实现前后代码进行比较,从耦合性、可重用性、模 块性等方面进行了定量分析,我们可以发现2 3 种模式中绝大多数模 式的模块化程度提高,超过一半的复用性得到改善。 本课题的意义在于,用面向方面的程序设计方法实现了设计模 式,并把它与用j a v a 实现的设计模式进行了比较,分析了各自的优 缺点。对基于模式的软件开发具有指导作用。 关键词:设计模式;面向方面的程序设计;复用性 a b s t r a c t a b s t r a c t s o f t w a r e d e s i g np a t t e r n sr e p r e s e n t e x c e l l e n t d e s i g n e x p e r i e n c ea b s t r a c t e df r o ms u c c e s s f u ls y s t e md e s i g n st h a tc a n b er e u s e d i th a sb e c o m ea ni m p o r t a n ts t u d ys u b j e c ti nm o d e r n s o f t w a r ed e s i g n i n g a 1 t h o u g hd e s i g np a t t e r ni sq u i t eu s e f u li n s o f t w a r er e u s e ,t h e r ea r es ti ll m a n yb a r r ie r s w h e n i n s t a n t i a t i n gt h ed e s i g np a t t e r n s ,s u c ha sp a t t e r no v e r l a p p i n g , t r a c e a b i l i t y ,a n dd i f f i c u l t i e si nr e u s i n gt h ep a t t e r nc o d e a s p e c t o r i e n t e dp r o g r a m m i n gm a k e si tp o s s i b l et oe x p r e s st h o s e p r o g r a m st h a to o pf a i l st os u p p o r t t h ei 舶p l e m e n t a t i o no ft h e p a t t e r nc a nb ew r a p p e di n t oo n ei n d i v i d u a lm o d u l e b yt h i sw a y t h em o d u l a r i t ya n dr e u s a b i l i t yo ft h ew h o l es y s t e mw i l lb e g r e a tl yi m p r o v e d t h i sp a p e rb a s i n go nt h ec o n c e p to fa o p t a k e s2 3d e s i g n p a t t e r n so fg o fa si m p l e m e n t a t i o nt a r g e t ,a n a l y z i n gg e n e r i c p o s s i b i l i t yo fe a c hp a t t e r nw h i c hi m p l e m e n t e db ya o p c o m p a r i n g c o d e so fe a c h p a t t e r n b e f o r ea n da f t e r ,a n a l y z i n g q u a n t i t a t i v e l yf r o mc o u p l i n ga n dr e u s a b i l i t y ,w ec a nf i n dt h a t l a r g en u m b e ro fg o fp a t t e r n si m p l e m e n t e di nam o r em o d u l a rw a y a n dm o r et h a nah a lfr e u s a b le t h i sp r o j e c ta i m st o i m p l e m e n t i n gd e s i g np a t t e r nw i t h a s p e c t o r i e n t e dp r o g r a m m i n ga n dc o m p a r i n g i tw i t ht h eo n e i m p l e m e n t e db yj a v a ,a n a l y z i n ga d v a n t a g e sa n dd i s a d v a n t a g e so f t h e i re a c h k e y w o r d :d e s i g np a t t e r n ,a s p e c t - o r i e n t e dp r o g r a m m i n g ,r e u s a b i l i 6 y 独创性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究 工作及取得的研究成果。尽我所知,除文中已经标明引用的内容外, 本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。对 本文的研究做出贡献的个人和集体,均已在文中以明确方式标明。本 人完全意识到本声明的法律结果由本人承担。 学位论文作者签名:习良荛彰 z 司年f 月哕日 学位论文版权使用授权书 本学位论文作者完全了解我校有关保留、使用学位论文的规定, 即一我校有权保留并向国家有关部门或机构送交论文的复印件和电子 版,允许论文被查阅。本人授权武汉工程大学研究生处可以将本学位 论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩 印或扫描等复制手段保存和汇编本学位论文。 保密0 ,在年解密后适用本授权书。 本论文属于 不保密。 ( 请在以上方框内打“、”) 学位论文作者签名:氆圭垫 御年6 月垆日 指导教师签名:何吖习 协勺年,月谚日 引言 引言 面向对象技术很好地解决了软件系统中角色划分的问题,借助于 面向对象的分析、设计和实现技术,开发者可以将问题领域的“名词” 转换成软件系统中的对象,从而很自然地完成从问题到软件的转换 【1 】 o 在面向对象的世界里,人们提出了各种方法和设计原则来保障系 统的可复用性与可扩展性,以期建立一个松散耦合、便于扩展的软件 系统。g o f 提出的“设计模式”,为我们提供了设计的典范与准则。 通过利用继承、多态,对责任进行分离、对依赖进行倒置,面向抽象, 面向接口,最终设计出灵活、可扩展、可重用的类库、组件,乃至于 整个系统的架构。在设计的过程中,通过各种模式体现对象的行为、 暴露的接口、对象间关系、以及对象分别在不同层次中表现出来的形 态。然而鉴于对象封装的特殊性,“设计模式”的触角始终在接口与 抽象中大做文章,而对于对象内部则无能为力。 同时o o p 的实现方案会使得模式的实现代码和模式的参与者代 码混杂在一起,从而产生严重的代码缠结和代码分散问题。尤其是, 当要把某种模式应用到已经存在的系统中时,往往需要对原有系统 的代码进行修改。同时要将某种模式从已经存在的系统中去除也变得 十分困难。即模式是可重用的,但是模式的实现却不可重用。当一个 系统涉及多个模式时,这种情况尤其严重。 因此,面向方面的编程( a o p ,a s p e c t o r i e n t e dp r o g r a m m i n g ) 应运而生。a o p 为开发者提供了一种描述横切关注点的机制,它通过 促进一种模块性补充了面向对象的编程,该模块性将横切关注点广泛 分布的实现聚拢到一个单元。采用a o p 能很好的将系统中实现模式 的核心代码模块化,从而可以透明的使用模式,很好的解决了上述问 题。 第一章绪论 1 1a o p 技术概述 第一章绪论 现在,o o p ( o b j e c t - o r i e n t e dp r o g r a m i n g ,面向对象编程) 已经 成为大多数软件开发项目的选择。面向对象技术很好地解决了软件系 统中角色划分的问题,借助于面向对象的分析、设计和实现技术,开 发者可以将问题领域的“名词”转换成软件系统中的对象,从而很自 然地完成从问题到软件的转换啦。 然而在实际应用中我们也看到o o p 并不能够完全解决跨越多个 模块的行为如日志记录、事务完整性、授权、安全及性能优化等问题。 我们将这种行为称为横切关注点( c r o s s c u t t i n gc o n c e r n s ) ,因为它 跨越了给定编程模型中的典型职责界限。虽然横切关注点会跨越多个 模块,但当前的技术倾向于使用一维的方法学来处理这种需求,把多 维的需求映射到一维上,这种不匹配导致了从需求到实现的不统一。 a o p 可以说是o o p 的补充和完善,a o p 为开发者提供了一种描述横切 关注点的机制,它通过促进一种模块性补充了面向对象的编程,该模 块性将横切关注点广泛分布的实现聚拢到一个单元,这种单元称为 a s p e c t ,这就是面向a s p e c t 的编程的来历。a o p 能够自动将横切关注 点嵌入到面向对象的软件系统中,从而实现了横切关注点的模块化: 通过划分a s p e c t 代码,横切关注点变得容易处理。开发者可以在编译 时更改、插入或除去系统的a s p e c t ,甚至重用系统的a s p e c t 。 面向方面的编程技术a o p 就是为了解决横切关注点而诞生的,通 过a o p ,开发人员可以对前述的横切关注点进行分离,另外它还提供 了一种可以明确捕获横切关注点的语言机制,这使得它可以将横切关 注点以模块化的形式来实现,而且通常还使得代码更加简化、更易于 维护和更易于重用,这些都是通过使用方面来实现的。o o p 所做的是 对对象进行封装和继承,而a o p 则对横切点进行封装。 武汉工程人学硕士学位论文 在a o p 中常使用的概念是:连接点、通知、元数据、切入点、导 言和方面。下面简要介绍这些a o p 概念u 1 : ( 1 ) 连接点( j o i n tp o i n t ) 。连接点是a o p 中的一个重要概念, 它是程序执行过程中明确定义的点,在这些点中执行a s p e c t 的代码。 连接点可能定义在方法调用、条件检测、循环的开始或是赋值动作处。 连接点有一个与之相关联的上下文。比如,一个方法调用连接点的上 下文可能会包含一个目标对象及调用参数等。 ( 2 ) 通知( a d v i c e ) 。一个a d v i c e 是一个被特定事件触发的逻 辑,这个a d v i c e 的行为可以被织入到一个调用者和被调用者队列之 间。可以说,传达消息是面向方面的编程的一个关键组成部份,它允 许定义跨多个模块的行为,并且透明地应用这些a d v i c e 到现有的对 象模型中。 ( 3 ) 元数据( m e t a d a t a ) 。元数据是能够在静态或者运行时间绑 定到一个类的附加信息,更强大的一方面是,能够动态绑定元数据到 一个给定的对象实例。当真正编写应用于任何对象的一般方面,而逻 辑需要知道制定类的信息时,元数据是非常强大的。一个好的元数据 类比就是e j b 规范。 ( 4 ) 切入点( p o i n t c u t ) 。它是处理a s p e c t 横切关系的关键, 能够灵活地描述程序的静态结构和动态控制流,它没有对任何一个具 体的函数类及模块作任何限制。p o i n t c u t s 告诉a o p 框架,哪些通知 ( a d v i c e ) 绑定到哪些类。什么元数据将应用于哪些类或者哪一个导 言将被传入哪些类。p o i n t c u t s 定义各种a o p 特征将怎样使用应用中 的类。 ( 5 ) 导言( i n t r o d u c e ) 。导言是在一个存在的类中增加方法或 者域的方法。它们甚至允许你改变当前存在的类的显式接口,并且引 入个混合的类,这个类实现了新的接口。导言允许你将多继承弓l 入 到一股的j a v a 类。 ( 6 ) 方面( a s p e c t ) 。a s p e c t ( 方面) 是a o p 中最重要的概念之 一。所谓a s p e c t ,从抽象意义上讲,是对系统组件的性能和语法产生 一定影响的属性。在系统设计的不同阶段,a s p e c t 也会现出不同的特 第一章绪论 点。从设计上说,a s p e c t 即是指横切系统的一些关注点:在编码阶 段,a s p e c t 是指用某一种a o p 语言构造的程序单元,它支持将横切系 统的关注点封装到单独的模块中。在实现阶段,通过专门的联结器 ( w e a v e r ) 将a s p e c t 单元功能加入到已有的核心构件中,使其同时作 用于所有相关的模块。通过a s p e c t ,a o p 允许编程人员采用一种松 散耦合的方法,以独立实体的姿态对一个横切关注点进行书写、查看 和编辑,然后再通过将各关注点进行联结以形成最终系统。 ( 7 ) 方面编织器( a s p e c tw e a v e r ) 。编译由a o p 语言开发的程 序,a o p 首先通过方面编织器( a s p e c tw e a v e r ) 将代码和方面编织在 一起然后再将程序编译成可执行文件。 a o p 技术的诞生并不算晚,早在1 9 9 0 年开始,来自x e r o xp a l o a 1 t or e s e a r c hl a b ( 即p a r c ) 的研究人员就对面向对象思想的局限 性进行了分析。他们研究出了一种新的编程思想,借助这一思想或许 可以通过减少代码重复模块从而帮助开发人员提高工作效率。随着研 究的逐渐深入,a o p 也逐渐发展成一套完整的程序设计思想,各种应 用a o p 的技术也应运而生h 。 a o p 技术在j a v a 平台下是最先得到应用的。就在p a r c 对于面向 方面编程进行研究的同时,美国n o r t h e a s t e r nu n i v e r s i t y 的博士生 c r i s t i n al o p e s 和其同事也开始了类似的思考。最终,美国国防先 进技术研究计划署( d e f e n s ea d v a n c e dr e s e a r c hp r o j e c t sa g e n c y 即d a r p a ) 注意到了这项工作,并提供了科研经费,鼓励将二者的工 作成果结合起来。他们通过定义一套j a v a 语言的扩展系统,使开发 者可以方便的进行面向方面的开发,这套扩展系统被称为a s p e c t j 。 之后,a s p e c t j 在2 0 0 2 年被转让给e c l i p s ef o u n d a t i o n ,从而成为 在开源社区中a o p 技术的先锋,也是目前最为流行的a o p 工具晦1 。 a s p e c t w e r k z 则是基于j a v a 的动态的、轻量级a o p 框架。 a s p e c t w e r k z 仍然是开源社区中的产品,由b e as y s t e m 提供赞助, 开发者则是b e a 的两名员工j o n a sb o n e r 和a l e x a n d r ey a s s e u r 。最 近版本是a s p e c t w e r k z2 0 。2 0 0 5 年1 月,a s p e c t j 和a s p e c t w e r k z 达成协议,同意将二者的成果综合到一起,取其精华创建一个单一的 武汉工程大学硕士学位论文 工具。他们合作的第一个发布版本为a s p e c t j5 ,它扩展了a s p e c t 语言,以支持基于a n n o t a t i o n 开发风格而又支持类似a s p e c t j 代码 风格。a s p e c t j5 也为j a v a5 的语言特性提供完全的a o p 支持。 在j a v a 阵营中,商用软件制造商 b o s s 在其2 0 0 4 年推出的 b o s s 4 0 中,引入了a o p 框架和组件。在5 b o s s4 0 中,用户可以在 b o s s 应用服务器外部单独使用j b o s sa o p ,该版本为 b o s sa o p1 o ,是 在2 0 0 4 年l o 月发布的。在2 0 0 5 年, b o s sa o p 框架又发布了1 3 0 版本,新版本对加载期织入( w e a v ) 和切点( p o i n tc u t ) 匹配的性 能做了很大的优化,使应用程序的启动时间大大缩短。 作为轻型的f r a m e w o r k ,s p r i n g 在开发轻量级的j 2 e e 时,应用 是非常广泛的。它通过i o c 模式( i n v e r s i o no fc o n t r o l ,控制反转 模式) 来实现a o p ,通常被称为s p r i n ga o p 。在2 0 0 4 年,被作为s p r i n g 框架的扩展而发布,目前版本已更新到1 1 3 。s p r i n ga o p 作为一种 非侵略性的,轻型的a o p 框架,开发者无需使用预编译器或其他的元 标签,在j a v a 程序中应用a o p 。目前,a o p 的功能完全集成到了s p r i n g 事务管理、日志和其他各种特性的上下文中。 从a o p 技术的整体发展来看,高性能、稳定、可扩展、易用的 a o p 框架是其趋势与目标。从上述对各种a o p 技术的分析来看,a o p 技术无疑是具有共同特点的,而各种实现技术就是围绕着这些共性深 入与延伸。 1 2 设计模式概述 模式是指在一个特定的背景下,反复出现问题的解决方案,它是 经验的文档化。在各种设计( 建筑、机械、软件等) 中,经验是非常重 要的,好的经验可以指导我们的工作,节约我们的时间:而坏的经验则 可以给我们以借鉴,从而减少失败的风险。但是经验仅仅是工作的积 累,很难被记录和传授。为了解决这个问题,建筑学家c h r i s t o p h e r a l e x a n d e r 提出了设计模式的概念。 在软件开发中模式的概念现在已经得到了广泛的应用,涉及到分 第一章绪论 析、设计、体系结构、编码、测试、重构等软件生命周期中的各个方 面。在本文中我们主要讨论的是设计模式,即在软件设计过程中反复 出现问题的解决方法。 设计模式并不是具体的“技术”,它讲述的是思想,通过提供一 个框架,设计模式可以解决应用开发中的许多问题。 各个模式的产生都是遵循下面两种基本准则: 能组合不继承 将对象的抽象与实现分离 总之,应用设计模式的目的是要降低系统内各对象间的依赖关 系,使它们处于松耦合状态。这样才可以提高对象的可扩展性和可复 用性。 1 9 9 5 年。e r i c h6 a r o m a ,r i c h a r dh e l m ,r a l p h j o h n s o n ,j o h n v 1 i s s i d e s 发表了( d e s i g np a t t e r n 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 ds o f t w a r e 一书h 1 ,对软件设计模式进行了总结,描述了 2 3 个设计良好、表达清楚的软件设计模式,使软件开发人员可以使爵 模式构造结构良好、可复用程度高的软件。在这本书中,作者把这2 3 个软件设计模式分成了三大类:创建性模式、结构型模式和行为模式 8 】 o 创建型模式主要用来帮助软件设计人员如何使用创建、组合等手 段构造系统的对象。一个类的创建性模式使用继承来改变被实例化的 类。 结构型模式涉及到如何组合类和对象己组成更大的结构。它采用 继承机制来组合对象和接口,从而实现新的功能。如采用多重继承的 机制将多类组合起来形成一个新类。 行为型模式涉及到在算法和对象之间如何分配功能,它不仅描述 了类或对象的模式,而且描述了对象之间的通信模式。这些模式刻划 了在运行时难以跟踪的复杂的控制流。行为模式一般使用继承机制在 类之间分派功能。 模式的研究起源于建筑工程设计c h r i s t o p h e ra l e x a n d e r 大师的 关于城市规划和建筑设计的著作,他认为:每一个模式描述了一个在 武汉l 程人学硕士学位论文 我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样, 你就能一次又一次地使用该方案而不必做重复劳动。尽管a l e x a n d e r 所指的是城市和建筑模式,但他的思想也同样适用于面向对象设计模 式”。 设计模式在软件设计行业中的起源可以追溯到1 9 8 7 年。那时, w a r d c u n n i n g h a m 和k e n tb e c k 在一起用s m a l l t a l k 做设计用户界面 的工作。他们决定使用a l e x a n d e r 的理论发展一个有五个模式的语言 来指导s m a l l t a l k 的新手,因此他们写成了一篇“u s i n gp a t t e r n l a n g u a g e sf o ro b j e c t o r i e n t e dp r o g r a m s ( 使用模式语言做面向对 象的程序) ”的论文( 发表于o o p s l a 8 7i no r l a n d o ) 。 在那以后不久,j i m c o p l i e n 开始搜集c + + 语言的成例( i d i o m s ) 。 成例是模式的一种,这些成例发表在1 9 9 1 年出版的a d v a n c e dc + + p r o g r a m m i n gs t y l e sa n di d i o m s ( 高级c + + 编程风格和成例) 一书 中。 从1 9 9 0 年到1 9 9 2 年, g o p 9 5 的四位作者开始搜集模式的工作。 关于模式的讨论和工作会议则一再举行。 在1 9 9 3 年8 月,k e n tb e c k 和g r a d yb o o c h 主持了在科罗拉多 的山区度假村召开的第一次关于模式的会议,模式研究的主要人物都 参加了这个会议,包括j i mc o li e n ,d o u gl e a ,d e s m o n dd s o u z e 。 n o r mk e r t h ,w o l f g a n gp r e e 等。 在那以后不久, g o f 9 5 四位作者的d e s i g np a t t e r n s 一书发 表了。此书发表之后,参加模式研究的人数呈爆炸性增长,被确定为 模式结构的数目也呈爆炸性增长。编程模式语言大会( p a t t e r n l a n g u a g e so fp r o g r a m m i n g ,或者p l o p ) 每年一次定期在美国举行, 大会的论文也汇编成书,公开发表为 p l o p 9 5 3 , p l o p 9 6 , p l o p 9 8 , p l o p 9 9 【l ”。 模式也不断地被应用到软件工程的各个方面。在诸如开发组织, 软件处理,项目配置管理等方面,都可以看到模式的影子,但至今得 到了最深研究的仍是设计模式和代码模式。 在( d e s i g np a t t e r n ) 一书中共包含了2 3 个模式,依据其目的 第一章绪论 可分为创建型( 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 ) 三种。创建型模式与对象的创建有关;结构型模式处 理类或对象的组合;行为型模式对类或对象怎样交互和怎样分配职责 进行描述。 i 3 论文研究背景 在计算机软件技术的发展过程中,软件编程方式一直在不断的发 展演化,从当初的面向机器,到面向过程和函数,到面向对象以及面 向组件的过程。每一种新的方法学都提供了一种更为自然的方式来讲 系统需求映射为编程结构,这些编程方法学的不断发展可以让人l f g , l 建复杂度更高的系统。 目前,o o p 是主流的程序设计模型,当对公共行为进行建模时, 展示了强大的功能,但是当对跨越多个模块的行为进行建模时,却陷 入了困境。 从技术的细节来看,面向对象设计技术本质是静态的,封闭的, 任何需求的细微变化都可能对系统设计造成重大影响。设计模式解决 特定的设计问题,使面向对象设计更灵活、复用性更好。然而,设计 模式虽然给了我们设计的典范与准则,通过最大程度的利用面向对象 的特性,诸如利用继承、多态,对责任进行分离、对依赖进行倒置, 面向抽象,面向接口,最终设计出灵活、可扩展、可重用的类库、组 件甚至整个系统的架构。然而鉴于对象封装的特殊性,设计模式的触 角始终在接口与抽象中大做文章,而对于对象内部则无能为力【1 9 1 。 a s p e c t o r i e n t e dp r o g r a m m i n g 正好可以解决这一问题。它允许开 发者动态地修改静态地0 0 模型,构造出一个能够不断增长以满足新 增需求的系统,就象现实世界中的对象会在其生命周期中不断改变自 身,应用程序也可以在发展中拥有新的功能。a o p 利用一种成为“横 切”的技术,剖开封装的对象内部,并将那些影响了多个类的行为封 装到一个可重用模块,并将其命名为“a s p e c t ”,即方面。所谓“方 面”,简单地说,就是将那些与业务主要关注点无关,却为业务模块 武汉 程大学硕士学位论文 所共同调用地逻辑或责任,例如事务处理、日志管理、权限控制等, 封装起来,便于减少系统地重复代码,降低模块间的耦合度,并有利 于未来的可操作性和可维护性 1 0 j2 】。 1 4 论文研究目的和目标 本研究的目的在于分析设计模式的横切关注点,给出g o f 模式 的a o p 实现方法,并对典型模型进行定量分析和比较。研究结果对 于基于a o p 的模式系统的开发具有指导作用。 研究的主要内容涉及以下几个方面: 1 、分析g o f 的2 3 个设计模式的横切关注点 用a o p 实现表1 所示的2 3 个设计模式,并分析各模式的横切关 注点。 表1 :g o f 2 3 种设计模式 创建型结构型行为型 f a c t o r y m e t h o da d a p t e r _ c l a s s 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 _ o b j e c t c h a i no f b u i l d e r b r i d g er e s p o n s i b i l i t y p r o t o t y p ec o m p o s i t e c o m m a n d s i n g l e t o n d e c o r a t o r i t e r a t o r f a c a d em e d i a t o r 对象 f l y w e i g h t m e m e n t o p r o x y o b s e r v e r s t a t e s t r a t e g y v i s i t o r 8 第一章绪论 式 2 、定量分析a o p 实现的设计模式和用j a v a 代码实现的设计模 分别用以下六个度量标准【1 2 1 : 1 ) w e i g h t e dm e t h o d sp e rc l a s s ( w m c ) 2 ) d e p t ho fi n h e r i t a n c et r e e ( d i t ) 3 ) n u m b e ro fc h i l d r e n ( n o c ) 4 ) c o u p l i n gb e t w e e no b j e c tc l a s s e s ( c b o ) 5 ) r e s p o n s ef o rac l a s s ( r f c ) 6 ) l a c ko fc o h e s i o ni nm e t h o d s ( l c o m ) 第一二章设计模式的横切关注点分离 第二章设计模式的横切关注点分离 a s p e c t w e r k z 框架,这是一个由b e as y s t e m s 赞助的开 放源代码项目。a s p e c t w e r k z 不是针对j a v a 技术的最早的 a o p 一一这项荣誉属于i b m 支持的j a v a 编程语言的 a s p e c t j 扩展一一但是作为一种快速、强大且灵活的,与 标准j a v a 代码结合的a o p 框架,a s p e c t w e r k z 获得了越来 越多的关注”。 在a o p 中p o i n t c u t 基本上只是一个中断应用程序执行 的( 由源代码定义的) “正常”流程并做一些不同的事情的 地方。a s p e c t w e r k z 支持与j a y a 代码结构相关的许多类型 的p o i n t c u t ,包括方法调用或者执行、字段g e t s e t 和异 常处理器执行,以及组合( 包括特定执行路径中的代码) ”。 用a s p e c t w e r k z 术语来说,一个a s p e c t 就是一个 j a v a 类,它可以作为交叉关注( c r o s s c u t t i n gc o n c e r n ) 的 目标。让一个类成为a s p e c t 不需要实现特殊的接口,但是 需要特定的方法签名以使类作为一个a s p e c t 被访问。一般 来说,希望a s p e c t 类在标准应用程序类层次结构之外,因 为可能只是通过a s p e c t w e r k z 框架使用它们,不过,对于它 们所在的位置同样没有特殊要求( 在运行时类路径中除外) 【i5 22 】 o a d v i c e 是a s p e c t 类中的一个方法,在p o i n t c u t 处用 它来做“某些不同的事件”。a d v i c e 的默认方法签名接受 一个参数,该参数提供关于中断的p o i n t c u t 的信息。 a s p e c t w e r k z 是基于j a v a 的简单轻量级动态a o p 框架, 在运行时加载字节码,所以可以在运行或编译时改造应用程 序或外部类库。可以使用a n n o t a ti o n 或x m l 方式定义 a s p e c t 。不需要单独的编译器即可集成a o p 到新的或已存在 的项目中去。所以在这里我们使用a s p e c t w e r k z 工具来实现 武汉_ 【程大学硕士学位论文 各设计模式。 2 1创建型模式 创建型模式( c r e a t i o n a lp a t t e r n ) :为你创建对象,而 不必由你直接实例化对象。针对给定的案例,程序可以在确 定创建哪些对象时获得更大的灵活性“。 2 1 1 工厂模式( f a c t o r ym e t h o d ) 1 ) 模式概述 工厂模式定义了一个用于创建对象的接口,让子类决定 实例化哪一个类。f a c t o r ym e t h o d 使一个类的实例化延迟到 其子类。其结构如图1 所示。适用于当个类不知道它所必须 创建的对象的类的时候;一个类希望由它的子类来指定它所 创建的对象的时候;或类将创建对象的职责委托给多个帮助 子类中的某一个,并且你希望将哪一个帮助子类是代理者这 信息局部化的时候。 图1 :工厂模式( f a c t o r ym e t h o d ) 2 ) 关注点分离 a o p 实现中将c r e a t o r 具体实现的共有操作分离出来设 第二二章设计模式的横切关注点分离 计为a s p e c t 类,完成a n o p e r a t i o n ( ) 操作,而原来的抽象类 设计成接口。 a s p e c t p u b d i c - c l a s sc r e a t o r l m ,l:lementation p u b l i cv o i dx n 6 p e r a t i o n o t ) 2 1 2抽象工厂模式( a b s t r a c tf a c t o r y ) 1 ) 模式概述 抽象工厂模式提供一个创建一系列相关或相互依赖对象 的接口,而无需指定它们具体的类,其结构如图2 所示。当 一个系统要独立于它的产品的创建、组合和表示时;一个系统要由多 个产品系列中的一个来配置时;当你要强调一系列相关的产品对象的 设计以便进行联合使用时;当你提供一个产品类库,而只想显示它们 的接口而不是实现时,可以使用a b s t r a c tf a c t o r y 模式。 图2 :抽象i :j 模式( a b s t r a c tf a c t o r y ) 2 ) 关注点分离 a o p 实现中将c o n c r e t e f a c t o r y l 和c o n c r e t e f a c t o r y 2 具体实现的 共有操作a n o p e r a t i o n ( ) 分离出来设计为a s p e c t 类。 a s p c e t p u b l i cc l a s sa b s t r a c t f a c t o r v e n h a n c e m e n tf p u b l i cv o i da 1 0 p e r a u o 。n o 、 纛l 武汉l :程人学硕士学位论文 2 1 3生成器模式( b u i l d e r ) 1 ) 模式概述 生成器模式将一个复杂对象的构建与它的表示分离,使得同样的 构建过程可以创建不同的表示,其结构如图3 所示。当创建复杂对象 的算法应该独立于该对象的组成部分以及它们的装配方式时,或当构 造过程必须允许被构造的对象有不同的表示时,可以使用b u i l d e r 模 式。 图3 :生成器模式( b u i l c r ) 2 ) 关注点分离 生成器模式能以不同方式将大量对象进行“装配”或组合,而组 合方式取决于数据。a o p 实现将c o n c r e t e b u i l d e r 的g e t r e s u l t 0 实现 分离出来设计为a s p e c t 类。 a s p e c t p u b l i cc l a s sb u i l d e r l n s t a n c e p u b l i cs t r i n gg e t r e s u l t 0f ,) 。e 咖r c s u l ; 第二章设计模式的横切关注点分离 2 1 4 原型模式( p r o t o t y p e ) 1 ) 模式概述 原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原 型创建新的对象,其结构如图4 所示。当一个系统应该独立于它的产 品创建、构成和表示时;当要实例化的类是在运行时刻指定时,例如 通过动态装载;为了避免创建一个与产品类层次平行的工厂类层次 时;当一个类的实例只能有几个不同状态组合中的一种时可以使用 p r o t o t y p e 模式。 巨蛰匡蛰 图4 :原型模式( p r o t o t y p e ) 2 ) 关注点分离 原型模式中,目标类是通过复制一个或多个原型类,然后修改 或填充所复制类的具体内容实现的。a o p 实现将具体类的c l o n e ( ) 方 法分离出来设计为a s p e c t 类。 a s o e c t d u b l i cc l a s sp r o t o t y p e p r o t o c o l 1 p u b l i co b j e c tj i o n e ( ) , 化m m 8 州l 。吣 2 1 5 单例模式( s i n g l e t o n ) 1 ) 模式概述 单例模式保证一个类仅有一个实例,并提供一个访问它的全局访 武汉工程大学硕士学位论文 问点,其结构如图5 所示。当类只能有一个实例而且客户可以从一个 众所周知的访问点访问它时,或当这个唯一实例应该是通过子类化可 扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时,可 以使用s i n g l e t o n 模式。 靳n 删e t o l t s t a l k :l n s l a m e ( ) 1 2 - s m g l e l e r a l l o n o g e l s i n g l e t o n o a l a t ) s t a l k :u m q 懈l n s t a n c e s i n o l e v ,n d a t a 图5 :单例模式( s i n g l e t o n ) 2 ) 关注点分离 单例模式拥有一个特定的方法,被用于实例化需要的对象。如果 对象已经被实例化,这个方法仅返回这个对象的一个引用:如果对象 尚未实例化,这个方法将对象实例化并返回这个新的实例的引用。 a o p 实现将实例化时的控制逻辑分离出来设计为a s p e c t 类。 a s p e c t p u b l i ca b s t r a c tc l a s ss i n g l e t o n p r o t o c o l a r o u n d ( ”c a l l ( ( s i n g l e t o n + ) n e w ( :) ) & ! ( c a l l ( ( p r i n t e r s u b c l a s s + ) n e w ( ) 矿) p u b l i cs i n g l e t o na d v i c e ( j o i n p o i n tj o i n p o i n t ) g e t d e c l a r i n g t y p e ( ) r e t u mt h ed e c l a r i n gc l a s s c l a s ss i n g l e t o n2j o i n p o i n t g e t s i g n a t u r e o g e t d e c l a r i n g t y p e o ; i f ( s i n g l e t o n s g e t ( s i n g l e t o n ) 一n u l l ) s i n g l e t o n s p u t ( s i n g l e t o n ,p r o c e e d ( ) ) ; r e t u r n ( s i n g l e t o n ) s i n g l e t o n s g e t ( s i n g l e t o n ) ; ) l 2 2结构型模式 结构型模式( s t r u c t u r a l ) :g i 述如何组合类和对象以形成更大的结 构。类模式( c l a s sp a t t e r n ) 和对象模式( o b j e c tp a t t e r n ) 的区别在于, 第二章设计模式的横切关注点分离 类模式描述了如何用继承来提供更有用的程序接口。对象模式则描述 了如何使用对象组合或者在其他对象中包含对象的方式,将对象组合 成更大的接口。 2 2 1 适配器模式( a d a p t e r ) 1 ) 模式概述 适配器模式将一个类的接口转换成客户希望的另外一个接口,使 得原本由于接口不兼容而不能一起工作的那些类可以一起工作,其结 构如图6 所示。该模式可用于使用一个已经存在的类,而它的接口不 符合你的需求;或创建一个可以复用的类,该类可以与其他不相关的 类或不可预见的类( 即那些接口可能不一定兼容的类) 协同工作。 图6 :适配器模式( a d a p t e r ) 2 ) 关注点分离 适配器模式需要一种方法,为一个内容合适但接口不匹配的对 象创建一个新的接口。a o p 实现中将a d a p t e r 的实现设计为a s p e c t 类。 a s p e c t d u b l i cc l a s sa d a p t e r d e c l a r e - p a r e r ;t s :a d a 足t e ei m p l e m e n t st a r g

温馨提示

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

评论

0/150

提交评论