- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
主要内容 15.1 问题提出 15.2 意图及结构图 15.3 生活中的例子 15.4 程序实现 15.5效果及实现要点 15.1 问题提出 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。 在这种情况下,如何将“行为请求者”与“行为实现者”解耦? 15.2 意图及结构图 意图:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。[GOF 《设计模式》] 15.3 生活中的例子 服务员接受顾客的点单,把它记在账单上封装。这个点单被排队等待烹饪。注意这里的账单是不依赖于菜单的,它可以被不同的顾客使用,因此它可以添入不同的点单项目。 15.4 程序实现 非命令模式实例 我们构建一个非常简单的程序,可以选择其中的菜单项File|Open和File|Exit,单击一个标题为Red的按钮,能将窗口的背景改为红色。 该程序包含一个File菜单对象,并添加了mnuOpen和mnuExit菜单项,它还包含一个称为butRed的按钮。 在设计阶段,单击其中的任何一项都会在Form类里产生一个小的方法,控件被单击时调用该方法。 问题出现:如果只有几个菜单项和按钮,这种方法没有任何问题,但是,当拥有几十个菜单项和多个按钮时,Form代码模块将会变得相当庞大。 15.4 程序实现 实例1:命令模式实例 确保每个对象能直接收到自己的命令的一种方法是:使用命令模式并创建单独的command对象。Command对象中总有一个Execute()方法,在对象上的操作发生时调用它。 创建RedButton 创建FileOpen菜单 创建FileExit菜单 Form客户端程序 Form客户端程序 实例2:在模式中添加CommandHolder接口 尽管将操作封装到一个 Command对象里是有利的,但把这个对象绑定到引起操作的元素(例如菜单项或按钮)中不是命令模式的本意。 相反, Command对象应该与调用客户程序真正地隔离,这样能分别改变调用程序和命令操作的细节。 我们可以让菜单类和按钮类成为独立存在的 Command对象的容器,而不是让命令成为菜单或按钮的一部分。 这里让UI元素实现一个 CommandHolder接口。 创建命令部分 创建RedCommand类 创建OpenCommand类 创建ExitCommand类 创建ComdButton对象类(UI部分) 创建CommandMenu对象类(UI部分) Form客户端程序 Form客户端程序 命令执行部分 Form客户端程序 实例3:在命令部分提供Undo操作 使用命令设计模式的另一个主要原因是,它们提供了一个便捷的存储方法并能完成 Undo功能。 每个命令对象都记住刚做过的事,并在有Undo请求时,只要计算量和内存需求不太过分,就能恢复到刚才的状态。 程序执行效果 命令部分类结构图 ColorCommand 创建blueCommand和RedCommand 创建UndoComd类 Form客户端程序 15.5效果及实现要点 1.Command模式的根本目的在于将“行为请求者”与“行为实现者”解耦,在面向对象语言中,常见的实现手段是“将行为抽象为对象”。 2.实现Command接口的具体命令对象ConcreteCommand有时候根据需要可能会保存一些额外的状态信息。 3.通过使用Compmosite模式,可以将多个命令封装为一个“复合命令”MacroCommand。 4.Command模式与C#中的Delegate有些类似。但两者定义行为接口的规范有所区别:Command以面向对象中的“接口-实现”来定义行为接口规范,更严格,更符合抽象原则;Delegate以函数签名来定义行为接口规范,更灵活,但抽象能力比较弱。 5.使用命令模式会导致某些系统有过多的具体命令类。某些系统可能需要几十个,几百个甚至几千个具体命令类,这会使命令模式在这样的系统里变得不实际。 作业:完成RedoCommand 在实例3的基础上对Undo的操作进行Redo操作 * 软件设计模式 主讲:刘德儿 教学目标 《软件设计模式》课程是解决软件复用问题,提高软件的开发效率,降低软件开发成本,课程总学时为32。 通过本课程的学习,掌握常见软件设计模式架构,能够使用软件设计模式思想解决软件工程领域代码功能重复利用问题。 这个简单的接口说明了两个方法:把一个命令对象放到类中的方法,以及取出命令对象去执行的方法。 命令部分 UI 部分 命令部分 执行Undo 用于存储要撤销的动作
您可能关注的文档
最近下载
- (11)--1.2.1 植物细胞的繁殖-有丝分裂.ppt VIP
- 2025年招生和对口招生文化素质测试数学试题及参考答案 完整版912.pdf VIP
- 广东省广州第六中学2024-2025学年高一上学期期中考试化学试题.docx VIP
- 大学物理1-1质点运动的描述.pptx VIP
- 征途漫漫,唯有奋斗——博物馆里的抗战教育:中国人民抗日战争纪念馆.pptx VIP
- 中国机长观后感中国机长观后感范文.pdf VIP
- 2024年浙江省温州市《保安员证》考试题库含答案统编版 .pdf VIP
- 管理心理学:理论与实践.pptx
- 课题申报书:基于生成式人工智能的医学教育创新融合途径研究.docx VIP
- 面向人工智能应用的语料数据生态构建与治理研究.docx VIP
文档评论(0)