(文章翻译自Java Design Pattern: Command)

命令设计模式在进行执行和记录的时候需要一个操作及其参数和封装在一个对象里面。在下面的例子中,命令是一个操作,它的参数是一个Computer,而且他们被封装在一个Switch中。

从另外一个视角来看,命令模式有四个部分:command,recevier,invoker和client。在这个例子中,Switch是invoker,Computer是receiver。一个具体的Command需要一个receiver对象而且调用receiver的方法。invok儿使用不同的具体Command。Client决定对于receiver去使用哪个command.

命令设计模式类图

Java命令模式例子

package designpatterns.command;import java.util.List;
import java.util.ArrayList;/* The Command interface */
interface Command {void execute();
}// in this example, suppose you use a switch to control computer/* The Invoker class */class Switch { private List<Command> history = new ArrayList<Command>();public Switch() {}public void storeAndExecute(Command command) {this.history.add(command); // optional, can do the execute only!command.execute();        }
}/* The Receiver class */class Computer {public void shutDown() {System.out.println("computer is shut down");}public void restart() {System.out.println("computer is restarted");}
}/* The Command for shutting down the computer*/class ShutDownCommand implements Command {private Computer computer;public ShutDownCommand(Computer computer) {this.computer = computer;}public void execute(){computer.shutDown();}
}/* The Command for restarting the computer */class RestartCommand implements Command {private Computer computer;public RestartCommand(Computer computer) {this.computer = computer;}public void execute() {computer.restart();}
}/* The client */
public class TestCommand {public static void main(String[] args){Computer computer = new Computer();Command shutdown = new ShutDownCommand(computer);Command restart = new RestartCommand(computer);Switch s = new Switch();String str = "shutdown"; //get value based on real situationif(str == "shutdown"){s.storeAndExecute(shutdown);}else{s.storeAndExecute(restart);}}
}

转载于:https://www.cnblogs.com/zhangminghui/p/4214667.html

[译]Java 设计模式之命令相关推荐

  1. java设计模式之备忘_[译]Java 设计模式之备忘录

    memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态. 在将来时空旅行将成为显示.而备忘录将使时空旅行的关键.主要的讲,它是怎么使一个对象对到它以前的一个 ...

  2. Java 设计模式之命令模式

    一.了解命令模式 1.1 什么是命令模式 命令模式将"请求"封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作.这种说法比较难以理解,换种说法 ...

  3. JAVA设计模式什么鬼(命令模式)——作者:凸凹里歐

    命令模式,通常指的是一个对象向另一个对象发送信息指令的行为模型,比如父母命令孩子写作业.将军命令士兵进攻等.我们经过分析拆解方法会得到三个模块,首先得有命令发送方,接着是被传递的命令本身,最后就是命令 ...

  4. JAVA设计模式之命令模式

    将请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化:对起那个请求进行排队或记录请求日志. 命令模式告诉我们可以为一个操作生成一个对象并给出它的一个execute(执行)方法. Comman ...

  5. Java设计模式:命令模式

    一.命令模式(Command)的定义 将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化:对请求排队或记录日志,以及支持可撤销的操作,将"发出请求的对象"和"接 ...

  6. 玉帝传美猴王上天,大闹天宫之Java设计模式:命令模式

    命令模式 示例 改进代码 命令模式 定义 意图 主要解决问题 何时使用 优缺点 玉帝传美猴王上天 命令模式和策略模式的区别 示例 系统需要设计一个命令行界面,用户可输入命令来执行某项功能,系统的功能会 ...

  7. 【java设计模式】命令模式——电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作。

    命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化:对请求排队或者记录请求日志,以及支持可撤销的操作. 命令模式包含如下角色: Comman ...

  8. Java设计模式(代理模式-模板方法模式-命令模式)

    Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...

  9. Java设计模式之行为型:命令模式

    前言: 在开发中,我们可能需要向某些对象发送一些请求,但我们不知道请求的具体接收者是谁,也不知道被请求的操作是哪个,只知道在系统运行中指定具体的请求接收者即可,打个比方,电视遥控器,我们只需知道按哪个 ...

最新文章

  1. 解决cookie跨域访问
  2. N6-旋转数组的最小元素
  3. 程序猿专属成语 get√
  4. TypeError: Cannot set property 'msg' of undefined
  5. Springboot-Flowable 快速开发工作流
  6. proxy_pool开源项目攻克学习
  7. Opencv--(x,y),(width,height)及(cols,rows)的关系
  8. 【jvm】java jvm 报错 OutOfMemoryError: GC overhead limit exceeded
  9. 【java】阿里为什么推荐使用LongAdder,而不是volatile?
  10. leetcode题库:5.最长回文子串Longest Palindrome string
  11. java mybatis sql server未返回响应。连接已关闭
  12. 【网络安全】考试试卷十一
  13. 如何检索某学术会议全部论文?
  14. CapstoneCS5211|CS5211电路|CS5211中文规格书|CS5211设计eDP到LVDS转接板/转换器方案
  15. 欲说还休,欲说还休,却道天凉好个秋
  16. Android11更新包,Android11系统
  17. AndroidStudio输入生日计算星座
  18. 写作三件套(VScode Miktex Latex Workshop)入门三大坑
  19. 微机原理与接口技术——A.微型计算机基础(4)
  20. python实现繁体中文和简体中文的互相转化

热门文章

  1. Fast RCNN 训练自己数据集 (2修改数据读取接口)
  2. C#序列化反序列化对象为base64字符串
  3. 步步为营(十六)搜索(二)BFS 广度优先搜索
  4. Linux /etc/init.d目录
  5. Solaris的syslog机制
  6. Navicat使用教程:使用Navicat Query Analyzer优化查询性能(第1部分)
  7. J2Cache 中使用 Lettuce 替代 Jedis 管理 Redis 连接
  8. Javascript Symbol 隐匿的未来之星
  9. Oracle PL/SQL入门之慨述
  10. algid parse error, not a sequence错误