登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学无止境

一点积累,与大家分享

 
 
 

日志

 
 

设计模式及其在软件设计中的应用研究  

2009-12-15 17:35:47|  分类: 设计模式 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
刘海岩1 , 锁志海2 , 吕 青3 , 梁建龙1
(1 .西安交通大学软件研究所, 710049, 西安; 2 .西安交通大学科学与技术处, 710049, 西安;
3 .西安交通大学校长办公室信息中心, 710049, 西安)
摘要: 总结了不同模式适用于不同应用的一般规律,分析了常用模式的内涵及侧重点,提出了设计模式应用
于软件设计的策略,即抽象求解问题、划分问题类型、模式初选、模式匹配、根据问题进行模式变体、软件体系
结构细化、设计优化、性能优化及设计质量度量.通过电力行业绘图平台的实际应用,给出了基于软件度量标
准下的系统稳定性参数的计算方法.分析与实地测试表明,所提策略能够优化软件的设计及性能,为使用者
提供了一种快速选取设计模式的途径.
关键词: 设计模式;模式匹配;软件度量
中图分类号: TP311 文献标识码: A 文章编号: 0253?987X(2005)10?1043?05
Design Patterns and Their Applications to Software Design
L iu Hai yan1 , Suo Zhihai2 , LüQin g3 , L iang J ianlon g1
(1 .Sof twa re Inst itut e, Xi′an Jia otong U niv er sity, Xi′a n 710049, China; 2 .Scien ce a nd T echnology Off ice, Xi′a n Jiaotong Unive rsi ty,
Xi′a n 710049, Chin a; 3 .Informa t ion Cent e r of P r esid ent Office, Xi′a n Ji aotong U niv er sity, Xi′an 710049, China)
Abstract: The general laws of differ ent design pat terns adapting to various application s wer e reviewed and
the intension of ordina ry patte rn and its focus wer e analyzed . The st r ategy applying the design pa ttern to
software design, including problem-solving abstr action, problem type pa rtition, initial patte rn selection,
patt ern match, pa ttern va riation according to the problem, softwa re a rchitecture refinement, design optimization,
per formance optimization and design quality measur ement was provided . T he calculation method
of the system stability par amet ers based on the softwa re meas urement standards was given through the
pr actical applica tion of the plotting pla tform to the field of electrical indust ry . T he practice and analysis
show that the proposed st rategy can optimize the softwa re design and its per formance, and provide users
with a way to select design patt ern .
Keywords: desig n pattern; p attern matching; sof twa re measurement
90 年代中期, 基于面向对象理论的设计模式
得到了进一步的发展, 之后Erich Gamma 等人给
出了设计模式的定义[1] .设计模式关注的是特定设
计问题及其解决方案, 它描述了如何利用面向对象
的基本概念和机制来解决可扩展的软件设计中经常
出现的问题,并针对设计问题给出可复用的解决方
案,而这个解决方案是对反复出现的设计结构进行
识别和抽象得到的.同时,每个模式都伴有定义的语
境和强度,语境解释了模式的适用情况,强度是语境
中的元素.如果问题的环境与模式的语境和强度相
匹配,该模式便可应用.因此,设计模式是软件人员
在面向对象软件设计中,经多次验证的成功解的记
录与提炼.
设计模式的描述方法包括自然语言描述法、统
一标记语言(UML)描述法、形式化语言描述法.自
然语言描述法比较简单、方便,但在现实与设计之间
收稿日期: 2005?01?12 . 作者简介: 刘海岩(1948~),女,副教授. 基金项目: 教育部高等学校博士学科点专项科研基
金资助项目(20040698063);陕西省自然科学基金资助项目(2004F35) .
的过渡描述不够流畅.对象建模技术(OMT)描述法
是利用类图和对象图对设计模式中的类、实例以及
整体模式结构进行图形描述的方法,而UML[2] 是
在OMT 基础上进一步发展起来的,其描述更加清
晰和统一,符合大部分软件设计人员的习惯,也便于
设计人员的理解和应用.形式化语言主要包括
DisCo、LePUS、LayOM、ADV/ ADO、CDL、PDL、
PDSP 等,其中DisCo[3] 侧重于描述设计模式中参与
者的交互行为.
1 模式的选取
各种模式均有其自身特点和适用范围,所以在
选取模式前应充分了解模式的内涵及侧重点,发掘
出不同模式的适用规律.
常用模式的应用规律有如下几种.
(1)享元(Flyweight)模式.该模式可用于实现
共享细粒度符号对象, 主要解决由于系统存在大量
类似的、具有共性的对象而严重影响系统性能的问
题.此时,可将对象的共同信息提取出来并作为一个
新的Flyweight 对象, 而原有对象需要的且重复的
信息描述只需要在一个共享的Flyweight 对象中描
述,从而大大削减了应用程序创建的对象,降低了程
序内存的占用率,增强了程序的性能.
如果一个应用程序需要显示的对象同属于一种
类型,就可以考虑用Flyweight 模式来共享一定数
量的对象.例如,在Java 程序中,字符串、Swing 树
节点、组件边界等都利用了Flyweight .如果从一个
数据库中读取一系列字符串,这些字符串中有许多
是重复的, 那么可将这些字符串储存在Flyweight
池(pool)中.又如字处理软件, 若以单字作为一个
对象的话,要是有数千个字则需数千个对象,这在处
理字的同时无疑要耗费很大的内存资源,所以需要
找出这些对象群的共同点, 设计一个元类, 并将共
享的类封装起来.
(2)代理(Proxy)模式.该模式主要是通过代理
来控制对象的访问,所覆盖的应用场合从小结构到
涉及整个系统的大结构,并具有以下功能.
防止越权访问功能,主要是对不同级别的用户
进行权限划分和管理控制,如论坛、银行信息、图书
档案管理等系统的管理控制.
存取优化功能, 正如word 文档中有很大的图
片,要打开该文档通常需要花费很长时间,这时需要
做图片Proxy 来代替真正的图片,以便于提高存取
效率.
客户端存取远程服务器信息的功能,如果直接
操作Internet 远端服务器上的对象,可能会因网络
运行缓慢而影响访问速度,这时需要利用Proxy .
(3)Ob server 模式.该模式的特点是在对象间
定义一对多的依赖关系,当一个对象的状态发生改
变时,所有依赖它的对象都将被告知并自动更新,主
要应用如下.
在界面设计中的应用.因为应用程序的开发往
往要求用户界面与业务逻辑分离, 而Obse rve r 模
式就是解决此类问题的最常用的设计模式.
解决对象间的状态同步问题.当一个用户视图
中的数据被其他用户改动后,后端的数据库能够自
动更新,而当数据库以其他方式更新后,用户视图中
的数据显示也会随之改变.
另外,Ob serve 模式还适用于实时更新的系统,
如股票系统、税务系统、网上商店等.
(4)组合(Composite)模式.该模式是将对象组
织成“整体-部分”的层次结构, 即将对象组织成树
状结构,从而保证客户机在使用单个对象和复合对
象上的一致性.这样做,客户端不但能一致地使用组
合结构或单个对象,简化了客户端的调用,也可以在
组合体内部加入新的对象,而用户则无需更改代码.
Composite 模式主要应用于树形结构系统, 诸
如论坛这类典型的系统,另外还常用于一些涉及产
品结构和配置管理的系统,此类系统可将产品的结
构和配置看作是一种产品结构树,如产品由零件、部
件组成,部件又由零件、部件组成.这种嵌套递归关
系通常使用Composite 模式来表示.
Composite 模式也适用于界面设计,例如图形
由若干基本对象组成,而这些对象的操作基本相同,
亦即移动、缩放、绘制、拷贝、粘贴等.使用Composite
模式可以规范设计,从而提高代码的可重用度.
(5)单件(Singleton)模式.它强调一个类仅有一
个实例,主要体现系统的多选一的特性.
(6)命令(Command)模式.它将请求与执行分
离,允许系统以不同请求、队列或日志请求作为参数
来表示客户,并支持可取消的操作.
(7)迭代器( Iter ator)模式.它提供了连续访问
一个聚集对象中的各个元素,而不需要暴露对象的
内部表示方法,适用于文档的查找和遍历.
(8)策略(Str ategy)模式.它定义了一系列的算
法,对每个算法进行封装,允许交互.利用该模式可
使算法的变化独立于使用它的客户.
还有其他模式也具有类似的适用于不同应用的
1044 西 安 交 通 大 学 学 报 第39 卷
一般规律,需要程序开发人员在开发具体的系统中
不断体会、归纳.
2 设计模式的选取策略
现有的软件设计模式一般应用于以下2 个方
面:①在软件系统设计的开始阶段就应用设计模式
对软件体系结构进行设计; ②在系统的体系结构设
计初步完成后,对系统另有要求的组件或模块通过
加入设计模式使其更加优化、灵活.由于设计模式具
有一定的复杂性,所以很难将其应用到具体的软件
设计中,主要原因有两点:①软件设计人员没有正确
把握和理解软件设计模式; ②没有一种有效的方法
来指导使用这些设计模式.
为此,本文在总结了一些软件设计模式的应用
经验的基础上,借鉴了对面向对象软件工程过程的
研究[ 4] ,提出了设计模式应用于软件设计的策略,步
骤如下.
步骤1: 对所要解决的问题进行抽象,并划分
适当的类型.
步骤2: 根据问题类型选择适合的设计模式.
步骤3: 规划问题和匹配模式, 即将所要解决
的问题与所选择的设计模式进行比较,找出共性.在
所要解决的问题域内考虑元素对应于模式中的类和
模式中的各种角色,如果发现选择的设计模式并不
合适,返回步骤3,重新进行设计.
步骤4: 对选取的模式进行变体,即对模式的
原始结构进行修改或扩展,以解决具体问题.
步骤5: 设计并细化所需的软件体系结构.
步骤6: 对设计质量进行度量.
设计模式的形式化描述为软件设计人员的模式
自动获取提供了依据[5] ,特别是在结合了设计模式
的形式化描述和规范匹配基础上研究设计模式的自
动化获取,对推动模式的应用具有重大意义.模式的
自动获取建立在需求和设计均需形式化描述的基础
上,这对于大多数非形式化描述的软件并不适用.将
设计模式的自动化获取与经验模式选取相结合,才
能真正推动模式的广泛应用.
3 设计模式应用举例
下面以电力行业的绘图平台设计为实例,进一
步说明模式选取策略.该实例是建立一个基于Web
的电力接线图绘制平台,并与其他应用系统接口.
3. 1 设计模式的初步选取
(1)分析问题且划分问题类型.实例系统主要是
产生矢量电力接线图,通过分析和抽象,判断出该问
题应该属于创建型模式.
(2)选择适合的创建型模式.在创建型模式中,
Singleton 模式强调一个类仅有一个实例,因此可排
除该模式.Builder 模式的特点是将复杂对象的构建
与它的表示分离,这不能满足系统对图元可扩充性
的要求.Factory Method 模式相对设计平台而言,
增加图元必须增加相应工厂类的实例, 所以后期程
序维护复杂,这也不符合系统对图元扩充性的要求.
Prototype 模式对电力逻辑平台框架来说可能
是最佳选择, 它仅需要为每个图元类实现一个
Clone 操作, 便可减少类的数目.除此之外, 由于电
力接线图是由多个图元的多个实例组成, Prototype
可以较好地满足这一要求.
(3)匹配模式. 据此得出系统的体系结构.
(4)综合系统性能.用对象来表示连接图中的所
有设备将占用大量的存储空间,也就是说这将影响
到系统的空间性能,因此需要采用其他设计模式来
修改体系结构.
3. 2 选取Flyweight、Builder 模式完善设计
在本实例中,可用Flyweight、Builder 2 种模式
完善设计,利用前者可修改平台体系结构,以解决系
统由于存在大量类似的、具有共性的对象而严重影
响系统性能的问题,利用后者能提高软件设计的灵
活性.
Flyweight 对象可以共享图元,即接线图中的
设备实例可以共享Flyweight 对象中的描述信息
(设备图示符号) .通过对对象共性的抽象和提取,会
大大减少系统占用的存储空间.但是, 原有Flyweight
模式中的共享对象已不能满足日益剧增的
设备类别,所以必须改进其共享对象(设备类别描
述)的构建方式.
要改进对象的构建方式,必然要从创建型模式
中寻找合适的模式.电力设备的图示可以先通过组
合基本几何图形(线段、圆形、矩形)来搭建各种设备
图示,再利用Builder 模式以同样的构建过程来创
建不同的表示.所以说,采用Builder 模式可改善对
象的创建过程,从而大大提高设计的灵活性.
应用3 种模式优化后的软件体系结构如图1 所
示.
3. 3 设计质量度量
为了度量平台的稳定性,即该平台对电力企业
的适应性,在此引入软件度量标准S[ 6] 进行设计质
量度量,即
设计模式及其在软件设计中的应用研究 - 积累在于坚持 - 学无止境
S = [ | M | - (| Fa | + | Fc | + | Fd |)]/ | M |
式中:M 为软件的模块全集; Fc 为被修改的模块集
合; Fa 为新添加的模块集合; Fd 为被删除的模块集
合.S 越趋近1, 表明需要变动的部分越少,则软件
设计越成熟、稳定,自然软件的适应性比较强.
分别在陕西、北京和山西3 地的电力企业实施
了本文所开发的系统,统计数据如表1 所示,计算结
果为
Σ
2
i = 0
Si = 2 .16
珚S = Σ
2
i = 0
Si/ 3 = 0 .72
式中:0~2 分别表示北京、陕西和山西地区.
通过分析可知,要修改的主要是业务规则模块,
但业务规则的基本功能没有改变,只是增加了各电
力企业自己独有的业务规范和术语.
通过3 地电力企业的实施数据统计计算,得到
系统的整体稳定性参数为0. 7 2 .这表明, 设计模式
表1 安全管理平台实施数据统计
北京陕西山西
| Fd | 0 0 0 | Fc | 1 1 1 | Fa | 0 0 0 |M| 3 4 4 S 0.66 0. 75 0. 75 的引入,使平台的稳定性更好,实践也证明了该平台
能满足各地电力企业的基本需求.
在基于Web 环境的平台设计中,通过选取适合
的设计模式,应用软件可以达到可扩充性、可复用性
要求.
4 结束语
本文通过对面向对象软件工程的研究,总结了
软件设计模式应用的一般规律,并通过分析常用模
式的内涵及侧重点提出了设计模式应用于软件设计
1046 西 安 交 通 大 学 学 报 第39 卷
的策略,包括抽象问题、划分类型、模式初选、模式匹
配、结构细化、设计优化及设计度量等.实例分析表
明,利用所提策略可快速进行模式选取,再经模式的
完善设计,可以优化系统的性能,提高软件设计的灵
活性.
  评论这张
 
阅读(901)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018