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