收藏 分销(赏)

深入浅出设计模式之命令模式.ppt

上传人:精**** 文档编号:1693958 上传时间:2024-05-07 格式:PPT 页数:31 大小:210KB 下载积分:12 金币
下载 相关 举报
深入浅出设计模式之命令模式.ppt_第1页
第1页 / 共31页
深入浅出设计模式之命令模式.ppt_第2页
第2页 / 共31页


点击查看更多>>
资源描述
命令模式命令模式封装调用一个例子一个例子public void actionPerformed(ActionEvent e)Object obj=e.getSource();if(obj=mnuOpen)fileOpen();/open fileif(obj=mnuExit)exitClicked();/exit from programif(obj=btnRed)redClicked();/turn redprivate void exitClicked()System.exit(0);private void fileOpen()FileDialog fDlg=new FileDialog(this,Open a file,FileDialog.LOAD);fDlg.show();private void redClicked()p.setBackground(Color.red);l上述程序设计,当按钮和菜单项不多的时候工作良好,但按钮和菜单项多时,就不好办了。public interface Command public void Execute();public void actionPerformed(ActionEvent e)Command cmd=(Command)e.getSource();cmd.Execute();这样,我们需要给每一个对象提供一个执行的方法。命令模式命令模式 these program objects should be completely separate from each other and should not have to know how other objects work.The user interface receives a command and tells a Command object to carry out whatever duties it has been instructed to do.The UI does not and should not need to know what tasks will be executed.命令模式命令模式l程序对象应该彻底的彼此解耦,不需要知道其他的对象是如何工作的。用户界面接收到命令然后告诉命令对象执行设定的工作,用户界面不知道也不应该知道命令是如何执行的。命令的发送者命令的接受者命令对象解耦了命令的发送者和命令的接受者饭店用餐饭店用餐l顾客点了饭菜,形成一个订单,侍者将订单交给厨房,厨房根据订单配菜。侍者无需知道订单的内容。饭菜的制作者和饭菜的消费者完全分开,彼此无需直接联系。遥控器的例子遥控器的例子l遥控器需要控制每一个电器的动作,如电灯,电扇,电视机,同是开,动作不一样。l我们设置命令接口 public interface Command public void execute();lpublic class LightOnCommand implements Command lLight light;lpublic LightOnCommand(Light light)lthis.light=light;llpublic void execute()llight.on();ll命令的接收对象命令接收对象自己执行命令对象命令对象l接收对象l实现了命令接口execute()receive.action();接受者接受者Commandpublic class SimpleRemoteControl Command slot;public SimpleRemoteControl()public void setCommand(Command command)slot=command;public void buttonWasPressed()slot.execute();遥控器测试遥控器测试lpublic class RemoteControlTest lpublic static void main(String args)lSimpleRemoteControl remote=new SimpleRemoteControl();lLight light=new Light();lLightOnCommand lightOn=new LightOnCommand(light);lremote.setCommand(lightOn);lremote.buttonWasPressed();l l命令模式命令模式l将请求封装成对象,使用不同的请求、队列或日志来参数化其他对象。命令模式支持可撤销操作。将请求封装成对象,什么对象?对象将接受者和动作包在内部,只有一个execute接口,外部调用这个接口,不知会进行什么样的操作。多功能遥控器多功能遥控器l需要控制多个设备,每一个设备都有开关按钮l需要一个命令组,来控制设备组:起居室灯,厨房灯,吊扇,车库门,音响,等lpublic class RemoteControl lCommand onCommands;lCommand offCommands;l lpublic RemoteControl()lonCommands=new Command7;loffCommands=new Command7;l lCommand noCommand=new NoCommand();lfor(int i=0;i 7;i+)lonCommandsi=noCommand;loffCommandsi=noCommand;lll l lpublic void setCommand(int slot,Command onCommand,Command offCommand)lonCommandsslot=onCommand;loffCommandsslot=offCommand;llpublic void onButtonWasPushed(int slot)lonCommandsslot.execute();l lpublic void offButtonWasPushed(int slot)loffCommandsslot.execute();llpublic class LightOffCommand implements Command l?lNoCommandl它是一个空对象,称监视对象,避免了判断 if(onCommandslot!=null)onCommandslot.execute();撤销命令撤销命令l有时应该允许后悔,允许命令撤销。lpublic interface Command lpublic void execute();lpublic void undo();llpublic class LightOffCommand implements Command lLight light;l lpublic LightOffCommand(Light light)lthis.light=light;ll lpublic void execute()llight.off();ll lpublic void undo()llight.on();ll使用撤销命令的遥控器使用撤销命令的遥控器l代码测试测试l代码使用状态实现撤销使用状态实现撤销l吊扇代码加入撤销到吊扇的命令类加入撤销到吊扇的命令类l代码l其它几个low,medium,off.如何实现。测试吊扇类测试吊扇类l代码遥控器的遥控器的party模式模式l产生一个新的命令,可以让所有设备打开。lpublic class MacroCommand implements Command lCommand commands;lpublic MacroCommand(Command commands)mands=commands;l lpublic void execute()lfor(int i=0;i commands.length;i+)lcommandsi.execute();ll lpublic void undo()lfor(int i=0;i commands.length;i+)lcommandsi.undo();lll测试宏命令测试宏命令l代码命令模式的优点和缺点:命令模式的优点和缺点:l优点:降低Client和命令接受者的耦合,是命令请求和命令执行的对象分割便于修改和扩张便于聚合多个命令l缺点:造成出现过多的具体命令类,太多文件。命令模式命令模式l将命令发送者和命令解释者解耦l两者的联系通过命令对象来中介的l命令对象包含接受者和execute方法l命令可以被撤销l宏命令是一种简单的命令
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服