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

下载本文档

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

文档简介

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

温馨提示

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

评论

0/150

提交评论