命令模式(Command)

  ——将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

  • 要点
  1. 将发出请求的对象和执行请求的对象解耦。
  2. 被解耦的两者之间通过命令对象进行沟通。命令对象封装了接收者和一个或一组动作。
  3. 调用者通过调用命令对象的execute()发出请求,使得接收者的动作被调用。
  4. 通过实现一个undo()方法撤销命令。还可以使用一个堆栈记录操作过程的每一个命令,实现多步撤销。
  5. 宏命令允许调用多个命令,也支持撤销。
  6. 命令也可以用来实现日志和事务系统。

 1 interface Command {
 2   public void execute();
 3 }
 4
 5 class Light {
 6   public void on() {
 7     System.out.println("light on");
 8   }
 9
10   public void off() {
11     System.out.println("light off");
12   }
13 }
14
15 class LintOnCommand implements Command {
16   Light light;
17
18   public LintOnCommand(Light light) {
19     this.light = light;
20   }
21
22   @Override
23   public void execute() {
24     light.on();
25   }
26
27 }
28
29 class SimpleRemoteControl {
30   Command command;
31
32   public SimpleRemoteControl() {}
33
34   public void setCommand(Command command) {
35     this.command = command;
36   }
37
38   public void buttonWasPressed() {
39     command.execute();
40   }
41 }
42
43 public class Test {
44   public static void main(String[] args) {
45     SimpleRemoteControl control = new SimpleRemoteControl();
46     Light light = new Light();
47     LintOnCommand onCommand = new LintOnCommand(light);
48
49     control.setCommand(onCommand);
50     control.buttonWasPressed();
51   }
52 }

转载于:https://www.cnblogs.com/-1307/p/6440191.html

《Head First 设计模式》之命令模式——遥控器相关推荐

  1. 设计模式 之 命令模式

    2019独角兽企业重金招聘Python工程师标准>>> 设计模式 之 命令模式 命令模式比较简单,不过多赘述 为什么需要命令模式 将"行为请求者"与"行 ...

  2. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  3. 23种设计模式之命令模式和策略模式的区别

    文章目录 概述 命令模式 策略模式 相同点 总结 概述 命令模式和策略模式确实很相似,只是命令模式多了一个接收者(Receiver)角色.它们虽然同为行为类模式,但是两者的区别还是很明显的.策略模式的 ...

  4. 设计模式之命令模式(java)实例——电视机遥控器

    一.问题描述 电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮, 不同的按钮对应电视机的不同操作.抽象命令角色由一个命令接口来扮 演,有三个具体的命令类实现了抽象命令接口,这三个具体命令 ...

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

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

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

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

  7. 设计模式笔记-命令模式

    命令模式 最近在重新看设计模式,看了<Head First设计模式(中文版)>中的命令模式,跟上次刚入职看的感觉有点不一样,还是记录一下,便于以后查阅. 作用:将 动作的请求者 和 动作的 ...

  8. 设计模式之命令模式(行为型)

    目录 一.模式定义 二.模式角色 三.模式分析 四.典型例子 五.适用场景 一.模式定义 命令模式(Command Pattern):将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分离,两 ...

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

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

最新文章

  1. matlab对图像信号进行频谱分析及滤波,数字信号处理课程设计---应用 Matlab对信号进行频谱分析及滤波...
  2. python3 json.dump乱码问题
  3. 清华大学郑莉c++答疑
  4. 科大星云诗社动态20220103
  5. mysql php宝塔 root_[转载]在安卓中安装宝塔面板运行PHP+MySQL
  6. 哲学家就餐问题python_哲学家就餐-同步问题解析-python
  7. php msi安装教程,如何判断msi安装包程序是否安装及安装路径
  8. 诗与远方:无题(四十八)
  9. 英特尔技术流新帅履职,给员工们一些“笔记”学习一下
  10. OPPO技术开放日第二期启动,聚焦碎片化场景下的流量探索
  11. Hessian Spring相关使用的简单例子
  12. pycharm的markdown文件编写
  13. python期货自动交易软件_python自动股票交易软件,求比较好用的股票自动交易软件...
  14. matlab对信号DTFT,【MATLAB】离散傅里叶变换DTFT和IDTFT
  15. 第二篇:Spring Cloud Eureka 服务注册+发现
  16. 恩格玛密码机的工作原理
  17. Prompt是什么意思?
  18. 第56章 SQL UCASE() 函数教程
  19. bash文件无法运行,提示没有那个文件或目录的解决方法
  20. iPhone设置中的“开发者”选项

热门文章

  1. 列注释_简单5步了解相关矩阵的注释热图
  2. 如何更好地利用“二八定律”提升SEO优化效果?
  3. 网站优化有什么值得注意的小细节吗?
  4. java book打印机_Java调用打印机进行打印
  5. python数据分析numpy_利用python进行数据分析-NumPy高级应用
  6. npoi的mvc怎么ajax导出,asp.net mvc利用NPOI导入导出Excel解决方法
  7. java 读取css文件_java文件读取的两种方式
  8. apache 编译php mysql_记一次痛苦的过程-------源码编译安装apache+php5+mysql
  9. redis实现分布式锁——核心 setx+pipe watch监控key变化-事务
  10. 一些开源搜索引擎实现——倒排使用原始文件,列存储Hbase,KV store如levelDB、mongoDB、redis,以及SQL的,如sqlite或者xxSQL...