转载请声明:http://www.cnblogs.com/courtier/p/4292187.html

  • 命令模式的简介:

用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。

  

  • 从代码方面来理解(我:调用者  遥控器:操作者又称为虚执行者 电视机:执行者):
package command;public interface Command {//延迟开机:void delay(String str);//暂停一下:void pause(String str);//马上开始:void start(String str);
}

  • 操作者必须持有执行者(不然,怎么知道交给谁):
package command;public class ConcreteCommand implements Command{//持有执行者的引用private Receiver receiver;public ConcreteCommand(Receiver receiver) {super();this.receiver = receiver;}@Overridepublic void delay(String str) {// TODO Auto-generated method stubstr = "延迟了30秒!" + str;receiver.delay(str);}@Overridepublic void pause(String str) {// TODO Auto-generated method stubstr = "暂停!"+str;receiver.pause(str);}@Overridepublic void start(String str) {// TODO Auto-generated method stub
        receiver.start(str);}}

  • 真正的执行者::
package command;public class ConcreteCommand implements Command{//持有执行者的引用private Receiver receiver;public ConcreteCommand(Receiver receiver) {super();this.receiver = receiver;}@Overridepublic void delay(String str) {// TODO Auto-generated method stubstr = "延迟了30秒!" + str;receiver.delay(str);}@Overridepublic void pause(String str) {// TODO Auto-generated method stubstr = "暂停!"+str;receiver.pause(str);}@Overridepublic void start(String str) {// TODO Auto-generated method stub
        receiver.start(str);}}

  • Client:它并不是真正的客户,它是操作者与执行者的桥梁:
package command;
//组合体,因为,只有它才知道我的参数给谁调用。如果,没有它就好像一台遥控器的红外线只能一台机器用一样.
public class Client {//遥控器private static Command command;//那台电视机private Receiver receiver;public Client(Receiver receiver) {super();this.receiver = receiver;}//对准哪台电视机public void assemble(){command = new ConcreteCommand(receiver);}}

  • 真正的调用者:
package command;
//真正的调用者
public class Invoker {//持有命令参数private Command command;public Invoker(Command command) {super();this.command = command;}public void runDelay(String str){//调用了延迟,延迟多少秒由Command来决定了
        command.delay(str);}public void runPause(String str){//调用了暂停
        command.pause(str);}public void runStart(String str){//调用了开始
        command.start(str);}
}

  • 运行结果:

(源代码:https://github.com/aliencool/Design-Pattrn/tree/master/command)

  • 结束语:

       命令模式是GOF经典模式之一,应用于Runnable

转载于:https://www.cnblogs.com/courtier/p/4292187.html

从电视机的角度来看设计模式之命令模式相关推荐

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

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

  2. 设计模式 之 命令模式

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

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

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

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

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

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

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

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

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

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

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

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

    命令模式 文章目录 命令模式 一.定义与理解 二.使用用例 1.非命令模式程序设计 2.命令模式程序设计 三.总结 一.定义与理解 命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行 ...

  9. 设计模式之命令模式---转载

    https://blog.csdn.net/chunqiuwei/article/details/79030816 https://blog.csdn.net/panweiwei1994/articl ...

最新文章

  1. 使用 Shiro 设计基于用户、角色、权限的通用权限管理系统
  2. python 网络聊天服务端
  3. python3 时间、日期、时间戳的转换
  4. yum lock 解决方法
  5. Are We Ready for SDN? Implementation Challenges for Software-Defined Networks
  6. 【数据分析+建模案例】基于所给数据集对饭店流量指标进行预测
  7. C++为什么要内存对齐
  8. 怎样将WPS转换word格式?如何进行操作
  9. qt-embedded-linux-opensource-src-4.5.3移植到s3c6410
  10. 作者:王建新(1969-),博士,中南大学信息科学与工程学院教授,中国计算机学会高级会员。...
  11. 生信宝典,生物信息学习资源
  12. 网易云api接口_网易云音乐你喜欢吗?你自己也可以做一个
  13. android模拟点击滑动,模拟Android的view点击和滑动监听
  14. WPF应用程序启动顺序机制
  15. 100天python、github_GitHub - 1392792445/Python-100-Days: Python - 100天从新手到大师
  16. 为wordpress提速,禁用gravatar,使用本地头像
  17. Unity常见资源类型
  18. python爬虫系列第六次笔记之验证码以及代理的使用
  19. 什么叫一层交换机,二层交换机,三层交换机?
  20. Xcode(OC):control reaches end of non-void function

热门文章

  1. PAT1002. 写出这个数
  2. 索引超出了数组界限_【每天一题】LeetCode 26. 删除排序数组中的重复项
  3. Python检验某个字符(串)是否属于另一个字符串
  4. 模式识别:聚类分析2020.05.27class
  5. 双流join(SparkStreaming)
  6. Centos 6.6 安装
  7. MySQL数据类型及后面小括号的意义
  8. NYOJ题目170网络的可靠性
  9. PHP PDO学习(二) exec执行SQL
  10. factory service provide自定义服务