




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
命令模式封装调用一个例子publicvoidactionPerformed(ActionEvente){ Objectobj=e.getSource(); if(obj==mnuOpen)fileOpen();//openfile if(obj==mnuExit)exitClicked();//exitfromprogram if(obj==btnRed)redClicked();//turnred}privatevoidexitClicked(){System.exit(0);}privatevoidfileOpen(){ FileDialogfDlg=newFileDialog(this,"Openafile",FileDialog.LOAD); fDlg.show();}privatevoidredClicked(){ p.setBackground(Color.red);}上述程序设计,当按钮和菜单项不多的时候工作良好,但按钮和菜单项多时,就不好办了。publicinterfaceCommand{ publicvoidExecute();}publicvoidactionPerformed(ActionEvente){ Commandcmd=(Command)e.getSource(); cmd.Execute();}这样,我们需要给每一个对象提供一个执行的方法。命令模式theseprogramobjectsshouldbecompletelyseparatefromeachotherandshouldnothavetoknowhowotherobjectswork.TheuserinterfacereceivesacommandandtellsaCommandobjecttocarryoutwhateverdutiesithasbeeninstructedtodo.TheUIdoesnotandshouldnotneedtoknowwhattaskswillbeexecuted.命令模式程序对象应该彻底的彼此解耦,不需要知道其他的对象是如何工作的。用户界面接收到命令然后告诉命令对象执行设定的工作,用户界面不知道也不应该知道命令是如何执行的。命令的发送者命令的接受者命令对象解耦了命令的发送者和命令的接受者饭店用餐顾客点了饭菜,形成一个订单,侍者将订单交给厨房,厨房根据订单配菜。侍者无需知道订单的内容。饭菜的制作者和饭菜的消费者完全分开,彼此无需直接联系。遥控器的例子遥控器需要控制每一个电器的动作,如电灯,电扇,电视机,同是开,动作不一样。我们设置命令接口
publicinterfaceCommand{publicvoidexecute();}publicclassLightOnCommandimplementsCommand{ Lightlight; publicLightOnCommand(Lightlight){ this.light=light; } publicvoidexecute(){ light.on(); }}命令的接收对象命令接收对象自己执行命令对象接收对象实现了命令接口execute(){receive.action();}
接受者CommandpublicclassSimpleRemoteControl{ Commandslot; publicSimpleRemoteControl(){}
publicvoidsetCommand(Commandcommand){ slot=command; }publicvoidbuttonWasPressed(){ slot.execute(); }}遥控器测试publicclassRemoteControlTest{ publicstaticvoidmain(String[]args){ SimpleRemoteControlremote=newSimpleRemoteControl(); Lightlight=newLight(); LightOnCommandlightOn=newLightOnCommand(light); remote.setCommand(lightOn); remote.buttonWasPressed(); }}命令模式将请求封装成对象,使用不同的请求、队列或日志来参数化其他对象。命令模式支持可撤销操作。将请求封装成对象,什么对象?对象将接受者和动作包在内部,只有一个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(); }publicclassLightOffCommandimplementsCommand{
??
}NoCommand它是一个空对象,称监视对象,避免了判断
if(onCommand[slot]!=null)onCommand[slot].execute();撤销命令有时应该允许后悔,允许命令撤销。publicinterfaceCommand{ publicvoidexecute(); publicvoidundo();}publicclassLightOffCommandimplementsCommand{ Lightlight;
publicLightOffCommand(Lightlight){ this.light=light; }
publicvoidexecute(){ light.off(); }
publicvoidundo(){ light.on(); }}使用撤销命令的遥控器代码测试代码使用状态实现撤销吊扇代码加入撤销到吊扇的命令类代码其它几个low,medium,off.如何实现。测试吊扇类代码遥控器的party模式产生一个新的命令,可以让所有设备打开。publicclassMacroCommandimplementsCommand{ Command[]commands; publicMacroCommand(Command[]commands){ mands=commands; } publicvoidexecute(){ for(inti=0;i<commands.length;i++){ commands[i].execute(); } } publicvoidundo(){ for(inti=0;i<commands.length;i++){ commands
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届广西南宁市普通高中高三下学期第二次适应性测试(二模)物理试题
- 个人成长与图书管理员试题及答案
- 2025年度舞台剧演出门票销售合同
- 二零二五年度新三板公司股权转让与工商登记服务协议
- 二零二五年度商业空间装修合同终止执行书
- 2025年度绿色循环经济废品回收项目合作协议书
- 2025年度银行信用卡积分奖励计划合作协议
- 二零二五年度房屋租赁合同租赁双方违约责任及赔偿标准
- 二零二五年度教师实习实训基地与实习生劳动合同
- 年轻考生的职场规划建议试题及答案
- 2025年关联公司资金往来协议
- 2025年江苏苏州市(12345)便民服务中心招聘座席代表人员高频重点模拟试卷提升(共500题附带答案详解)
- 2025年电力人工智能多模态大模型创新技术及应用报告-西安交通大学
- 2025年江苏盐城市交通投资建设控股集团有限公司招聘笔试参考题库附带答案详解
- 大型活动安全应急预案及保障措施
- (高清版)DB3204∕T 1006-2020 生活饮用水水质在线监测技术规范
- 2024版股份公司成立股东协议书
- 2025年春新人教版物理八年级下册课件 第九章第一节压强
- 《通信用开关电源的元器件降额准则-》
- DB11T 1322.18-2024 安全生产等级评定技术规范 第18部分:燃气供应企业
- 《黄金与美元的对决》课件
评论
0/150
提交评论