行为型模式命令模式_第1页
行为型模式命令模式_第2页
行为型模式命令模式_第3页
行为型模式命令模式_第4页
行为型模式命令模式_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

行为型模式命令模式第一页,共五十六页,编辑于2023年,星期二2命令模式——意图意图:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。第二页,共五十六页,编辑于2023年,星期二3命令模式——结构第三页,共五十六页,编辑于2023年,星期二4命令模式——参与者命令(Command)角色:声明了一个给所有具体命令类的抽象接口。具体命令(ConcreteCommand)角色:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法。方法。第四页,共五十六页,编辑于2023年,星期二5命令模式——参与者请求者(Invoker)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。客户端(Client)角色:创建一个具体命令(ConcreteCommand)对象并确定其接收者。第五页,共五十六页,编辑于2023年,星期二6生活中的例子Command模式将一个请求封装为一个对象,从而使你可以使用不同的请求对客户进行参数化。用餐时的账单是Command模式的一个例子。服务员接受顾客的点单,把它记在账单上封装。这个点单被排队等待烹饪。注意这里的"账单"是不依赖于菜单的,它可以被不同的顾客使用,因此它可以添入不同的点单项目。第六页,共五十六页,编辑于2023年,星期二7生活中的例子第七页,共五十六页,编辑于2023年,星期二8家电自动化遥控器第八页,共五十六页,编辑于2023年,星期二9第九页,共五十六页,编辑于2023年,星期二如何设计这个遥控器API许多类都具备on()和off()方法,还有一些dim(),setTemperature(),setVolumn(),setDirection()。还有更多厂商类,每个类还会有各式各样的方法遥控器应该知道如何解读按钮被按下的动作,然后发出正确的请求,但是不需要知道这些家电自动化的细节,比如如何打开热水器。10第十页,共五十六页,编辑于2023年,星期二如何设计这个遥控器API命令模式可以将“动作的请求者”从“动作的执行者”对象中解耦,在这个例子中请求者是遥控器,执行者则是厂商类中的相应对象,如热水器等。11第十一页,共五十六页,编辑于2023年,星期二12第十二页,共五十六页,编辑于2023年,星期二对象村餐厅的角色和职责在餐厅交互模型中,女招待员实现了将“发出请求的对象”和“接受与执行这些请求的对象”分隔开来。对于遥控器API,我们需要分隔开“发出请求的按钮代码”和“执行请求的厂商特定对象”,实现两者的松散耦合。13第十三页,共五十六页,编辑于2023年,星期二从餐厅到命令模式14第十四页,共五十六页,编辑于2023年,星期二第一个命令对象15第十五页,共五十六页,编辑于2023年,星期二实现一个打开电灯的命令16第十六页,共五十六页,编辑于2023年,星期二使用命令对象17第十七页,共五十六页,编辑于2023年,星期二遥控器使用的简单测试18第十八页,共五十六页,编辑于2023年,星期二定义命令模式命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。命令对象将动作和接收者包进对象中,这个对象只须具备execute()方法即可。19第十九页,共五十六页,编辑于2023年,星期二定义命令模式20第二十页,共五十六页,编辑于2023年,星期二21第二十一页,共五十六页,编辑于2023年,星期二将命令指定到插槽22第二十二页,共五十六页,编辑于2023年,星期二实现遥控器23第二十三页,共五十六页,编辑于2023年,星期二实现遥控器24第二十四页,共五十六页,编辑于2023年,星期二实现命令25第二十五页,共五十六页,编辑于2023年,星期二实现命令26第二十六页,共五十六页,编辑于2023年,星期二逐步测试遥控器27第二十七页,共五十六页,编辑于2023年,星期二逐步测试遥控器28第二十八页,共五十六页,编辑于2023年,星期二逐步测试遥控器29第二十九页,共五十六页,编辑于2023年,星期二逐步测试遥控器30第三十页,共五十六页,编辑于2023年,星期二31第三十一页,共五十六页,编辑于2023年,星期二大功告成撤销功能一键全开32第三十二页,共五十六页,编辑于2023年,星期二撤销功能撤销功能:将上一动作逆转,如上一动作为开灯,则撤销功能则为关灯。33第三十三页,共五十六页,编辑于2023年,星期二撤销功能34第三十四页,共五十六页,编辑于2023年,星期二撤销功能35第三十五页,共五十六页,编辑于2023年,星期二撤销功能36第三十六页,共五十六页,编辑于2023年,星期二撤销功能37第三十七页,共五十六页,编辑于2023年,星期二驱动程序38第三十八页,共五十六页,编辑于2023年,星期二驱动程序39第三十九页,共五十六页,编辑于2023年,星期二使用状态实现撤销40第四十页,共五十六页,编辑于2023年,星期二使用状态实现撤销41第四十一页,共五十六页,编辑于2023年,星期二使用状态实现撤销42第四十二页,共五十六页,编辑于2023年,星期二加入撤销到吊扇的命令类43第四十三页,共五十六页,编辑于2023年,星期二准备测试天花板吊扇44第四十四页,共五十六页,编辑于2023年,星期二准备测试天花板吊扇45第四十五页,共五十六页,编辑于2023年,星期二测试天花板吊扇46第四十六页,共五十六页,编辑于2023年,星期二Party模式47第四十七页,共五十六页,编辑于2023年,星期二Party模式48第四十八页,共五十六页,编辑于2023年,星期二Party模式——实现步骤49第四十九页,共五十六页,编辑于2023年,星期二Party模式——实现步骤50第五十页,共五十六页,编辑于2023年,星期二Party模式——实现步骤51第五十一页,共五十六页,编辑于2023年,星期二命令模式的更多用途队列请求:可以将运算块打包,然后将它传来传去,就像是一个对象一样。日志请求:利用命令模式,将历史记录储存在磁盘中。一旦系统死机,我们就可以将命令对象重新加载,并成批地依次调用这些对象的execute()方法。52第五十二页,共五十六页,编辑于2023年,星期二命令模式的效果及实现要点Command模式的根本目的在于将“行为请求者”与“行为实现者”解耦,在面向对象语言中,常见的实现手段是“将行为抽象为对象”。实现Command接口的具体命令对象ConcreteCommand有时候根据需要可能会保存一些额外的状态信息。通过使用Compmosite模式,可以将多个命令封装为一个“复合命令”MacroCommand。53第五十三页,共五十六页,编辑于2023年,星期二命令模式的效果及实现要点Command模式与C#中的Delegate有些类似。但两者定义行为接口的规范有所区别:Command以面向对象中的“接口-实现”来定义行为接口规范,更严格,更符合抽象原则;Delegate以函数签名来定义行为接口规范,更灵活,但抽象能力比较弱。使用命令模式会导致某些系统有过多的具体命令类。某些系统可能需要几十个,几百个甚至几千个具体命令类,这会使命令模式在这样的系统里变得不实际。54第五十四页,共五十六页,编辑于2023年,星期二命令模式的适用性在下面的情况下应当考虑使用命令模式:1.使用命令模式作为"CallBack"在面向对象系统中的替代。"CallBack"讲的便是先将一个函数登记上,然后在以后调用此函数。2.需要在不同的时间指定请求、将请求排队。一个命令对象和原先的请求发出者可以有不同的生命期。换言之,原先的请求发出者可能已经不在了,而命令对象本身仍然是活动的。这时命令的接收者可以是在本地,也可以在网络的另外一个地址。命令对象可以在串形化之后传送到另外一台机器上去。55第五十五页,共五十六页,编辑于2023年,星期二命令模式的适用性在下面的情况下应当考虑使用命令模式:3.系统需要支持命令的撤消(undo)。命令对象可以把状态存储起来,等到客户端需要撤销命令

温馨提示

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

评论

0/150

提交评论