收藏 分享(赏)

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

上传人:精品资料 文档编号:10527898 上传时间:2019-11-26 格式:PPT 页数:31 大小:172.50KB
下载 相关 举报
深入浅出设计模式之命令模式.ppt_第1页
第1页 / 共31页
深入浅出设计模式之命令模式.ppt_第2页
第2页 / 共31页
深入浅出设计模式之命令模式.ppt_第3页
第3页 / 共31页
深入浅出设计模式之命令模式.ppt_第4页
第4页 / 共31页
深入浅出设计模式之命令模式.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、命令模式,封装调用,一个例子,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 red private void exitClicked() System.exit(0); private void fileOpen() FileDialog fDl

2、g = new FileDialog(this, “Open a file“,FileDialog.LOAD);fDlg.show(); private void redClicked() p.setBackground(Color.red); ,上述程序设计,当按钮和菜单项不多的时候工作良好,但按钮和菜单项多时,就不好办了。,public interface Command public void Execute(); public void actionPerformed(ActionEvent e) Command cmd = (Command)e.getSource();cmd.Exe

3、cute(); 这样,我们需要给每一个对象提供一个执行的方法。,命令模式,these program objects should be completelyseparate 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

4、should not need to know what tasks will be executed.,命令模式,程序对象应该彻底的彼此解耦,不需要知道其他的对象是如何工作的。用户界面接收到命令然后告诉命令对象执行设定的工作,用户界面不知道也不应该知道命令是如何执行的。,命令的发送者,命令的接受者,命令对象,解耦了命令的发送者和命令的接受者,饭店用餐,顾客点了饭菜,形成一个订单,侍者将订单交给厨房,厨房根据订单配菜。侍者无需知道订单的内容。饭菜的制作者和饭菜的消费者完全分开,彼此无需直接联系。,遥控器的例子,遥控器需要控制每一个电器的动作,如电灯,电扇,电视机,同是开,动作不一样。 我们设置

5、命令接口public interface Commandpublic void execute();,public class LightOnCommand implements Command Light light;public LightOnCommand(Light light) this.light = light;public void execute() light.on(); ,命令的接收对象,命令接收对象自己执行,命令对象,接收对象 实现了命令接口,Command,public class SimpleRemoteControl Command slot; public Si

6、mpleRemoteControl() public void setCommand(Command command) slot = command; public void buttonWasPressed() slot.execute(); ,遥控器测试,public class RemoteControlTest public static void main(String args) SimpleRemoteControl remote = new SimpleRemoteControl();Light light = new Light();LightOnCommand lightO

7、n = new LightOnCommand(light);remote.setCommand(lightOn);remote.buttonWasPressed(); ,命令模式,将请求封装成对象,使用不同的请求、队列或日志来参数化其他对象。命令模式支持可撤销操作。 将请求封装成对象,什么对象? 对象将接受者和动作包在内部,只有一个execute接口,外部调用这个接口,不知会进行什么样的操作。,多功能遥控器,需要控制多个设备,每一个设备都有开关按钮 需要一个命令组,来控制设备组:起居室灯,厨房灯,吊扇,车库门,音响,等,public class RemoteControl Command on

8、Commands;Command offCommands;public RemoteControl() onCommands = new Command7;offCommands = new Command7;Command noCommand = new NoCommand();for (int i = 0; i 7; i+) onCommandsi = noCommand;offCommandsi = noCommand;,public void setCommand(int slot, Command onCommand, Command offCommand) onCommandssl

9、ot = onCommand;offCommandsslot = offCommand; public void onButtonWasPushed(int slot) onCommandsslot.execute(); public void offButtonWasPushed(int slot) offCommandsslot.execute();,public class LightOffCommand implements Command ?,NoCommand,它是一个空对象,称监视对象,避免了判断if(onCommandslot != null)onCommandslot.exe

10、cute();,撤销命令,有时应该允许后悔,允许命令撤销。 public interface Command public void execute();public void undo(); ,public class LightOffCommand implements Command Light light;public LightOffCommand(Light light) this.light = light;public void execute() light.off();public void undo() light.on(); ,使用撤销命令的遥控器,代码,测试,代码,使

11、用状态实现撤销,吊扇代码,加入撤销到吊扇的命令类,代码 其它几个low,medium,off.如何实现。,测试吊扇类,代码,遥控器的party模式,产生一个新的命令,可以让所有设备打开。 public class MacroCommand implements Command Command commands; public MacroCommand(Command commands) mands = commands; public void execute() for (int i = 0; i commands.length; i+) commandsi.execute(); public void undo() for (int i = 0; i commands.length; i+) commandsi.undo(); ,测试宏命令,代码,命令模式的优点和缺点:,优点: 降低Client和命令接受者的耦合,是命令请求和命令执行的对象分割 便于修改和扩张 便于聚合多个命令 缺点:造成出现过多的具体命令类,太多文件。,命令模式,将命令发送者和命令解释者解耦 两者的联系通过命令对象来中介的 命令对象包含接受者和execute方法 命令可以被撤销 宏命令是一种简单的命令,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报