使用Command设计模式实现编辑器的RedoUndo.pdf

上传人:qwe****56 文档编号:69631767 上传时间:2023-01-07 格式:PDF 页数:5 大小:275.84KB
返回 下载 相关 举报
使用Command设计模式实现编辑器的RedoUndo.pdf_第1页
第1页 / 共5页
使用Command设计模式实现编辑器的RedoUndo.pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《使用Command设计模式实现编辑器的RedoUndo.pdf》由会员分享,可在线阅读,更多相关《使用Command设计模式实现编辑器的RedoUndo.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第1 0 卷第4 期2 0 1 0 年2 月1 6 7 1 1 8 1 5(2 0 1 0)4 1 0 3 3 4)4科学技术与工程S c i e n c eT e c h n o l o g ya n dE n g i n e e r i n gV 0 1 1 0N o 4F b b 2 0 1 0 2 0 1 0S e i T e e h E n g n g 使用C o m m a n d 设计模式实现编辑器的R e d o U n d o侯军伟康慕宁(西北工业大学计算机学院,西安7 1 0 1 2 9)摘要设计模式是对于共性问题成功的解决方案,采用设计模式可以减少系统设计的复杂度,提高系

2、统开发的效率 1 。C o m m a n d 模式是常用的2 3 种设计模式中的一种。C o m m a n d 模式是将“动作”进行抽象,将与动作有关的所有信患进行封装,从而实现调用操作的对象与知道如何实现该操作的对象解捐。R e d o U n d o 是现代编译器中必不可少的一种工具,可以提高工作效率。详细探讨了如何使用C o m m a n d 模式实现R e d o U n d o 以及各种扩展。关键词设计模式C o m m a n d 模式R e d o U n d o中图法分类号T P3 1 1 1 1;文献标志码A软件设计不仅仅是一个创造性的工作过程,同时也需要尽可能多地利用

3、已有的成功经验。一个好的、有经验的软件设计师不会采用全新的理念去设计软件系统,而往往是根据自己多年的实践经验,或是将其它成功的软件系统的知识汇集在一起,结合创新,才能设计出高质量的系统;甚至在开发系统时使用开源代码以丰富系统,减少开发成本。这种在思想和代码上的合作趋势促成了软件设计模式(D e s i g nP a t t e r n)的产生口1o“C h r i s t o p h e rA l e x a n d e r说过:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。尽管A l e x a n d e

4、r 所指的是城市和建筑模式,但他的思想也同样适用于面向对象设计模式,只是在面向对象的解决方案里,我们用对象和接口代替了墙壁和门窗。两类模式的核心都在与提供了相关问题的解决方案 3】。将设计模式引入到软件设计和开发过程中,目的就是为了充分利用已有的开发经验,2 0 0 9 年1 0 月2 8 日收到第一作者简介:侯军伟(1 9 8 4 一),男,陕西省乾县人,硕士生。研究方向:软件工程与网络软件。E-n m i l:f i 0 3 h o u g r n 且i l c o r n。通信作者简介:康慕宁(1 9 6 9 一),男,教授,研究方向:数据存储。通过复用已经公认的设计,能够在解决问题时获

5、得先发优势,并且可以避免重蹈前人的覆辙;使用设计模式可以帮助开发人员设计出一种更加灵活的、更加模块化的、可复用的和易于理解的软件。1C o m m a n d 模式分析C o m m a n d 模式是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 dS o f t w a r e 的作者)的2 3 种常用设计模式中的一种,下面描述C o m m a n d模式的优点、结构图。1 1C o m m a n d 模式简介C o m m a n d 模式是将“动作

6、”进行抽象,将与动作有关的所有信息进行封装,从而实现调用操作的对象与知道如何实现该操作的对象解耦。C o m m a n d模式的意图是:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作HJ。每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更 万方数据1 0 3 4科学技术与工程1 0 卷不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的J。1 2 使用C o m m a n

7、 d 模式的好处(1)将所有的“动作”都抽象成一个C o m m a n dI n t e r f a c e 的实现,将与这个动作有关的信息都包含在这个动作中,可以实现很清晰的分工,实现整个项目的并行开发。(2)将与一个操作有关的所有信息紧密的聚合在一个类中,外界所看到的只是一个个独立的C o m m a n d,所以当这个操作因为外部的原因比如说用户的要求发生改变,或者前期设计得不好,需要调整时,可以将所有的修改局限在这个类中,实现了它和其他对象之间的低耦合,对于复用和修改都是有益的。(3)因为封装之后C o m m a n d 之间都是彼此独立的和低耦合的,因此可以实现多个动作的简单组合

8、,从而实现一个复合动作。(4)因为将所有与这个操作有关的信息都集中在这个类中,外界所看到的只是E x e c u t e、R e d o 和U n d o 接口,所以简化了控制类所需要关注的信息,实现简单而统一的部署和操作,当系统中需要因为新功能而添加C o m m a n d 时,控制类不需要做任何变更,因此C o m m a n d 模式在迭代开发或者P r o t o t y p e 开发中特别有用。1 3C o m m a n d 模式结构图如图1 所示。图I 命令模式结构图2U n d o R e d o 功能简介现在的应用程序在用户使用的过程都提供了撤销重做的功能,也就是本文中说到

9、的U n d o R e d o,允许用户回退到上一步之前的状态,当用户回退到以前的步骤之后,又允许用户进行重做,对用户的每一步操作都进行了记录,这样即使用户在误操作或者用户想回到以前的某一步时都可以回退过去,这样无疑很大程度上增加了用户使用时的灵活性,本文将展示给用户如何实现一个灵活U n d o R e d o,比如说有限步的U n d o R e d o,无限步U n d o R e d o,限制内存的U n d o R e d o,可持续的U n d o R e d o(程序重新打开之后,U n d o R e d o 信息依然保留)。3 使用C o m m a n d 模式实现U n

10、 d o R e d o应用程序的每次操作会改变当前应用程序的状态。所以如果想撤销某次动作,必须回到先前的状态,为了回到先前的状态,需要在应用程序运行时存储它的状态。要支持重做,只能从目前状态跳到下一个状态。为了实现U n d o R e d o,必须存储应用程序的状态并在撤销时跳到前一个状态而在重做时跳到下一个状态。而对于应用程序的状态,如果按照c p u 中断时保护现场这种方式,因为要保护的状态与应用程序有关,当程序内部状态很多时,可行性会很低;并且用户何时去做U n d o R e d o 也不可预知,假如按照保存状态这种方式去做的话,将会占用大量的空间,因此这种方式不可取。例如在图像编

11、辑软件中实现U n d o R e d o,假如用户对图像执行了一系列的滤镜操作并且图像本身比较大,此时如果用户每一步都将整个编辑之后的图像保存下来,这样保存的信息十分巨大。对于上面的图像编辑器的例子想到可以考虑只保存滤镜算法和相应的参数就可以从一步跳转到另外一步,即当用户从A 状态跳转到B 状态时,假如A状态已知,则只需要记录从A 状态跳转到B 状态所需要的信息I n f o 和A r i t h m e t i c,因此可以以此为契机,只保存I n f o 和A r i t h m e t i c。当需要从A 跳转到B时,可以通过A 状态、和A r i t h m e t i c R e

12、d o 重新计算B状态,以达到记录最小的信息并实现跳转的目的;同时当需要从B 状态跳转到A 状态时。可以通过I n f o 万方数据4 期侯军伟,等:使用C o m m a n d 设计模式实现编辑器的R e d o U n d o1 0 3 5和相应的A r i t h m e t i cU n d o(通常和A r i t h m e t i c R e d o 的操作是相反的),因此通过A r i t h m e t i c U n d o 和跳转时的参数I n f o 推导出A 状态。A 状态跳转到B 状态对应于R e d o,从B 状态跳转到A 状态对应于U n d o(如图2 所示

13、)。因为用户执行U n d o R e d o 时,都是基于当前状态,相当于状态A,只需要将从A 存储的I n f o 和A-r i t h m e t i c 就能够到达状态B,达到撤销和重做的目的。C o m m a n d 模式封装A c t i o n,A c t i o n 由I n f o 和A-f i t h m e t i c 组成,和上面实现U n d o R e d o 的思想一致,因此可以利用C o m m a n d 模式来实现U n d o R e d o。可以通过保存一系列的A c t i o n 来实现多步操作的U n d o R e d o。因为用户执行的A c

14、 t i o n 具有时序性,因此需要增加一个A c t i o n 列表,按顺序保存用户的A c t i o n。4 模型应用图2U n d o R e d o 状态图将上面的模型应用了在一个实际的项目F o r-m E d i t 中,该软件实现了F M A(一种帐表格式,类似于H T M L)的可视化编辑(类似与D r e a m w e a v e r 实现了H T M L 的可视化编辑)。图3 是该软件U n d o R e d o 模块的类图。F o r m E d i t 的软件需求分析中要求U n d o R e d o 模块所占用的内存空间必须小于某个给定值,用户可以通过配置

15、菜单修改该值,因此U n d o R e d o 模块不能实现无限次数,即用户可以回退到先前的每一步操作。实现细节上给C o m m a n d 接口增加G e t S i z e()方法,用以返回该C o m m a n d 所占有的内存空间,在每次用户进行一个新的操作时,先对新操作所产生的c o n l n l a n d 大小进行计算,然后根据将该c o m m a n d放入U n d o R e d o C o n t r o l 中之后,U n d o R e d o C o n t r o l 所产生的空间是否大于最大值,而对开始加入的c o l n 一图3F o r m E d

16、 i tU n d o R e d o 模块类图m a n d 做出删除操作。下面是U n d o R e d o C o n t r o l 中A d d C o m m a n d 的算法简单描述如下:m i l e(当前内存占用加新命令内存小于临界值)假如当前命令列表已经为空。则删除新命令。并且返回失败;否则删除命令列表头节点,并且更新当前命令列表占用的内存大小;将新命令加入当前命令列表中,并且更新当前命令列表占用的内存大小。返回成功;5U n d o R e d o 扩展现实中的U n d o R e d o 可以需要做出一些扩充。(1)比如当软件关闭以后可以维持以前的操作序列,即可以

17、对上次的操作实现U n d o R e d o,这个时候只需要在关闭软件的时候序列化A c t i o n 列表。(2)固定U n d o R e d o 的步骤数,只需要在A c t i o n 列表中增加A c t i o n 时,判断当前队列中已有的A c t i o n 数目,加人操作数超过了限定操作数则从头 万方数据1 0 3 6科学技术与工程1 0 卷部删除A c t i o n。6 结论C o m m a n d 模式将命令的执行者和命令的调用者解耦,提高系统的扩展性和灵活性,使用命令模式实现U n d o R e d o,将命令模式的优点带到了U n d o R e d o 中

18、,特别适合并行开发,而不是一般地在完成主要功能之后将U n d o R e d o 功能添加到系统中。使用命令模式实现U n d o R e d o 会增加很多命令类,使系统变得更加复杂,因此不适合小项目。设计模式在软件设计领域大量存在,只要能够经常积累开发和设计经验,设计模式运用得适当,那么必将对完成应用系统的设计与开发有很大的帮助,甚至受益无穷旧1。参考文献1 蔡文貌,王自强,都思丹设计模式在机器人控制系统中的应用科学技术与T 程,2 0 0 8;8(1):1 9 9-2 0 22 叶建平设计模式在游乐设施检测管理信息系统中的应用微计算机信息,2 0 0 5;2 1(1 2-3):2 1

19、3 2 1 43S u b r a h m a n y a mA J 2 E E 编程指南马树奇,译北京:电子工业出版社。2 0 0 24G a m m aE。H e l mR,J o h n s o nR,e ta 1 D e s i g np a t t e r n se 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 N e wY o r k:A d i s o n W e s!e y,1 9 9 55 管宇基于粒子系统的实时瀑布模拟系统仿真学报,2 0 0 5;1 6(“):2 4 7

20、l 2 4 7 46 焦付强,闵联营,裴朝举,等O b s o r v e r 模式与C o m m a n d 模式在条码采集系统中的应用研究电脑知识与技术,2 0 0 9;5(4):1 0 0 2 1 0 0 3,1 0 0 8U s i n gt h eC o m m a n dD e s i g nP a t t e r nt oI m p l e m e n tt h eR e d o U n d oF u n c t i o ni nE d i t o rH O UJ u n-w e i,K A N GM u n i n g(D e p t o f C o m p u t eS c

21、 i e n c e。N o r t h w e s tP o l y t e c h n i e a lU n i v e r s i t y,X i a l l7 1 0 1 2 9,P R C h i n a)A b s t r a c t D e s i g np a t t e r ni st h a tp e o p l em a k ei no r d e rt oi m p r o v es o f t w a r er e u s ea no b j e c t-o r i e n t e dd e s i g nm e t h o d o l o g y C o m m a

22、 n dp a t t e r ni sad e s i g np a t t e r ni nw h i c ha no b j e c ti su s e dt or e p r e s e n ta n de n c a p s u l a t ea l lt h ei n f o r-m a t i o nn e e d e dt oc a l lam e t h o da tal a t e rt i m e T h i si n f o r m a t i o ni n c l u d e st h em e t h o dn a m e,t h eo b j e c tt h a

23、 to w n st h em e t h o da n dv a l u e sf o rt h em e t h o dp a r a m e t e r s R e d o U n d oi si n d i s p e n s a b l ei nm o d e me d i t o ra s at o o l t h a tc a ni m p r o v ew o r ke f f i c i e n c y H o wt ou s et h ec o m m a n dp a t t e r nt oa c h i e v eR e d o U n d oa n dv a r i

24、 o u se x t e n s i o n sa r ed i s c u s s e di nd e t a i l K e yw o r d s d e s i g np a t t e r nc o m m a n dp a t t e r nR e d o U n d o 万方数据使用Command设计模式实现编辑器的RedoUndo使用Command设计模式实现编辑器的RedoUndo作者:侯军伟,康慕宁作者单位:西北工业大学计算机学院,西安,710129刊名:科学技术与工程英文刊名:SCIENCE TECHNOLOGY AND ENGINEERING年,卷(期):2010,10

25、(4)参考文献(6条)参考文献(6条)1.焦付强;闵联营;裴朝举 Observer模式与Command模式在条码采集系统中的应用研究期刊论文-电脑知识与技术2009(04)2.管宇 基于粒子系统的实时瀑布模拟 2005(11)3.Gamma E;Helm R;Johnson R Design patterns elements of reusable object-oriented software 19954.Subrahmanyam A;马树奇 J2EE编程指南 20025.叶建平 设计模式在游乐设施检测管理信息系统中的应用期刊论文-微计算机信息 2005(12-3)6.蔡文貌;王自强;都思丹 设计模式在机器人控制系统中的应用期刊论文-科学技术与工程 2008(01)本文链接:http:/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 财经金融

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

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