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

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深入浅出的设计模式之命令模式

命令模式 封装调用 一个例子 public void actionPerformed(ActionEvent e) { Object obj = e.getSource(); if(obj == mnuOpen) fileOpen(); //open file if (obj == mnuExit) exitClicked(); //exit from program if (obj == btnRed) redClicked(); //turn red } private 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); } 上述程序设计,当按钮和菜单项不多的时候工作良好,但按钮和菜单项多时,就不好办了。 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. 命令模式 程序对象应该彻底的彼此解耦,不需要知道其他的对象是如何工作的。用户界面接收到命令然后告诉命令对象执行设定的工作,用户界面不知道也不应该知道命令是如何执行的。 饭店用餐 顾客点了饭菜,形成一个订单,侍者将订单交给厨房,厨房根据订单配菜。侍者无需知道订单的内容。饭菜的制作者和饭菜的消费者完全分开,彼此无需直接联系。 遥控器的例子 遥控器需要控制每一个电器的动作,如电灯,电扇,电视机,同是开,动作不一样。 我们设置命令接口 public interface Command{ public void execute(); } public class LightOnCommand implements Command { Light light; public LightOnCommand(Light light) { this.light = light; } public void execute() { light.on(); } } 命令对象 接收对象 实现了命令接口 public class SimpleRemoteControl { Command slot; public SimpleRemoteControl() { } 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 lightOn = new LightOnCommand(light); remote.setCommand(lightOn); remote.buttonWasPressed(); } } 命令模式

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档