首页 《命令模式》PPT课件

《命令模式》PPT课件

举报
开通vip

《命令模式》PPT课件第十一章命令模式家电自动化遥控器的API遥控器有七个可编程的插槽(每个控制一个不同的家电自动化装置),每个插槽有对应的开(on)/关(off)按钮;有一个撤消(undo)按钮。有一组Java类,这些类是由多家厂商开发出来的,用来控制家电装置,例如电灯、风扇、热水器、音响设备等。遥控器厂商类喷头立体声音响水龙头热水器恒温器厨具控制家电自动化遥控器的API(续)目标:创建一组控制遥控器的API,每个插槽能控制一个或一组装置(包括目前的装置和未来可能的装置)。问题:有许多厂商类,每个类有各自的操作。遥控器应该怎样解读按钮...

《命令模式》PPT课件
第十一章命令模式家电自动化遥控器的API遥控器有七个可编程的插槽(每个控制一个不同的家电自动化装置),每个插槽有对应的开(on)/关(off)按钮;有一个撤消(undo)按钮。有一组Java类,这些类是由多家厂商开发出来的,用来控制家电装置,例如电灯、风扇、热水器、音响设备等。遥控器厂商类喷头立体声音响水龙头热水器恒温器厨具控制家电自动化遥控器的API(续)目标:创建一组控制遥控器的API,每个插槽能控制一个或一组装置(包括目前的装置和未来可能的装置)。问题:有许多厂商类,每个类有各自的操作。遥控器应该怎样解读按钮被按下的动作?解决 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 :采用“命令对象”封装动作请求。当按钮按下时,请命令对象做相关的工作。让“动作的请求者(遥控器)”从“动作的执行者(厂商类之一的实例)”对象中解耦。餐厅订餐更详细地研究刚才的交互过程。从餐厅到命令模式与订餐过程的略微不同之处:客户一般不会直接指定厨师。实现命令接口所有的命令对象实现相同的包含一个方法的接口。在餐厅中,此方法为orderUp(),命令对象中惯用名称execute()。publicinterfaceCommand{publicvoidexecute();}只有这一个方法。实现一个打开电灯的命令根据厂商提供的类,light有两个方法:on()和off()。publicclassLightOnCommandimplementsCommand{Lightlight;publicLightOnCommand(Lightlight){this.light=light;}publicvoidexecute(){light.on();}}使用命令对象假定遥控器只有一个按钮和对应的插槽:publicclassSimpleRemoteControl(){Commandslot;publicSimpleRemoteControl(){}publicvoidsetCommand(Commandcommand){slot=command;}publicvoidbuttonWasPressed(){slot.execute();}}设置插槽控制的命令。如果要改变遥控器的行为,可以重复调用这个方法。遥控器的角色是“调用者”。遥控器使用的简单测试publicclassRemoteControlTest{publicclassstaticvoidmain(String[]args){SimpleRemoteControlremote=newSimpleRemoteControl();Lightlight=newLight();LightOnCommandlightOn=newLightOnCommand(light);remote.setCommand(lightOn);remote.buttonWasPressed();}}}客户调用者创建一个命令对象接收者命令传给调用者调用者执行命令命令模式定义利用命令来参数化对象。遥控器对象并不关心是什么命令对象,只要该命令对象实现了Command接口即可。命令模式也可以实现队列、日志和撤消操作。命令模式类图将命令指定到插槽将遥控器的每个插槽,对应到一个命令,把遥控器变成“调用者”。当按下按钮,相应命令对象的execute()方法就会被调用,使得接收者的动作被调用。实现遥控器publicclassRemoteControl{Command[]onCommands;Command[]offCommands;publicRemoteControl(){onCommands=newCommand[7];offCommands=newCommand[7];CommandnoCommand=newNoCommand();for(inti=0;i<7;i++){onCommands[i]=noCommand;offCommands[i]=noCommand;}}publicvoidsetCommand(intslot,CommandonCommand,CommandoffCommand){onCommands[slot]=onCommand;offCommands[slot]=offCommand;}实现遥控器(续)publicvoidonButtonWasPushed(intslot){onCommands[slot].execute();}publicvoidoffButtonWasPushed(intslot){offCommands[slot].execute();}publicStringtoString(){//覆盖toString(),打印出每个插槽和它对应的命令。StringBufferstringBuff=newStringBuffer();stringBuff.append("\n------RemoteControl-------\n");for(inti=0;i 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 按钮命令。调用undoCommand实例变量的undo()方法。测试undo按钮publicclassRemoteLoader{publicstaticvoidmain(String[]args){RemoteControlWithUndoremoteControl=newRemoteControlWithUndo();LightlivingRoomLight=newLight("LivingRoom");LightOnCommandlivingRoomLightOn=newLightOnCommand(livingRoomLight);LightOffCommandlivingRoomLightOff=newlightOffCommand(livingRoomLight);remoteControl.setCommand(0,livingRoomLightOn,livingRoomLightOff);remoteControl.onButtonWasPushed(0);remoteControl.offButtonWasPushed(0);System.out.println(remoteControl);remoteControl.undoButtonWasPushed();remoteControl.offButtonWasPushed(0);remoteControl.onButtonWasPushed(0);System.out.println(remoteControl);remoteControl.undoButtonWasPushed();}}打开、关闭电灯,然后撤消。关闭、打开电灯,然后撤消。测试结果打开电灯,关闭电灯。电灯命令。按下撤消按钮。undo记录的命令。使用状态实现undo要实现撤消的功能,通常需要记录一些状态。下面以天花板上的掉扇为例说明。publicclassCeilingFan{publicstaticfinalintHIGH=3;publicstaticfinalintMEDIUM=2;publicstaticfinalintLOW=1;publicstaticfinalintOFF=0;Stringlocation;//例如客厅intspeed;publicCeilingFan(Stringlocation){this.location=location;speed=OFF;}publicvoidhigh(){//设置高转速}publicvoidmedium(){//设置中转速}publicvoidlow(){//设置中转速}publicvoidoff(){//关闭掉扇}publicintgetSpeed(){returnspeed;}}加入undo到掉扇命令类publicclassCeilingFanHighCommandimplementsCommand{CeilingFanceilingFan;intprevSpeed;publicCeilingFanHighCommand(CeilingFanceilingFan){this.ceilingFan=ceilingFan;}publicvoidexecute(){prevSpeed=ceilingFan.getSpeed();ceilingFan.high();}publicvoidundo(){if(prevSpeed==CeilingFan.HIGH){ceilingFan.high();}elseif(prevSpeed==CeilingFan.MEDIUM){ceilingFan.medium();}elseif(prevSpeed==CeilingFan.LOW){ceilingFan.low();}elseif(prevSpeed==CeilingFan.OFF){ceilingFan.off();}}}记录掉扇之前的速度变量。记录掉扇之前的速度。掉扇速度设置回之前的值。测试天花板掉扇publicclassRemoteLoader{publicstaticvoidmain(String[]args){RemoteControlWithUndoremoteControl=newRemoteControlWithUndo();CeilingFanceilingFan=newCeilingFan("LivingRoom");CeilingFanMediumCommandceilingFanMedium=newCeilingFanMediumCommand(ceilingFan);CeilingFanHighCommandceilingFanHigh=newCeilingFanHighCommand(ceilingFan);CeilingFanOffCommandceilingFanOff=newCeilingFanOffCommand(ceilingFan);remoteControl.setCommand(0,ceilingFanMedium,ceilingFanOff);remoteControl.setCommand(1,ceilingFanHigh,ceilingFanOff);remoteControl.onButtonWasPushed(0);remoteControl.offButtonWasPushed(0);System.out.println(remoteControl);remoteControl.undoButtonWasPushed();remoteControl.onButtonWasPushed(1);System.out.println(remoteControl);remoteControl.undoButtonWasPushed();}}实例化高速、中速和关闭三个命令。中速设置到0号插槽,高速设置到1号插槽并加载两个插槽的关闭命令。中速高速测试结果中速打开天花板掉扇,然后关闭。遥控器命令。撤消最后一个命令,回到中速。打开高速。再一次撤消,回到中速。使用宏命令①首先创建宏命令集合。Lightlight=newLight("LivingRoom");TVtv=newTV("LivingRoom");Stereostereo=newStereo("LivingRoom");Hottubhottub=newHottub();LightOnCommandlightOn=newLightOnCommand(light);StereoOnCommandstereoOn=newStereoOnCommand(stereo);TVOnCommandtvOn=newTVOnCommand(tv);HottubOnCommandhottubOn=newottubOnCommand(hottub);创建所有的装置:电灯、电视、音响和热水器。使用宏命令(续)②创建两个数组,记录打开和关闭命令。Command[]partyOn={lightOn,stereoOn,tvOn,hottubOn};Command[]partyOff={lightOff,stereoOff,tvOff,hottubOff};MacroCommandpartyOnMacro=newMacroCommand(partyOn);MacroCommandpartyOffMacro=newMacroCommand(partyOff);publicclassMacroCommandimplementsCommand{Command[]commands;publicMacroCommand(Command[]commands){this.commands=commands;}publicvoidexecute(){for(inti=0;i
本文档为【《命令模式》PPT课件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥35.0 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
希望图文
公司秉着用户至上的原则服务好每一位客户,专注课件、范文、教案设计制作
格式:ppt
大小:3MB
软件:PowerPoint
页数:43
分类:其他高等教育
上传时间:2022-05-05
浏览量:6