前言:【模式总览】——————————by xingoo

  模式意图

  将一个请求封装成一个对象,从而对这个命令执行撤销、重做等操作。

  典型的Eclipse开发中,编辑器的操作就需要用到这个模式,比如Undo、Redo等等。

  另外这个模式使得一个命令的触发与接收解耦,这样我们就可以演变成把感兴趣的对象接收这个命令,当命令触发时,这些对象就会执行操作。这个机制也是java事件的处理方式。

  应用场景

  1 命令抽象成对象

  2 在不同的时刻,指定或者排队命令

  3 支持 Undo或者Redo等操作

  4 修改日志,当系统崩溃时,利用修改日志执行撤销

  5 原语操作上构造一个高层系统(不理解)

  模式结构

  Invoker 命令的触发者,触发一个命令的执行。

/*** 命令的触发者,发送命令* @author xingoo**/
class Invoker{private Commond commond;public Invoker(Commond commond) {this.commond = commond;}public void action(){commond.excute();}
}

  Receiver 命令的接受者,针对命令,执行一定的操作。

/*** 命令的接受者,负责接收命令,进行处理* @author xingoo**/
class Receiver{public Receiver() {}public void action(){System.out.println("Action of receiver!");}
}

  Commond 命令的抽象接口

/*** 命令接口,定义命令的统一接口* @author xingoo**/
interface Commond{public void excute();
}

  ConcreteCommond 具体的命令,关联一个接收者对象,当命令执行时,执行这个接收者对应的操作。

/*** 具体的命令* @author xingoo**/
class ConcreteCommond implements Commond{private Receiver receiver;public ConcreteCommond(Receiver receiver) {this.receiver = receiver;}public void excute() {receiver.action();}}

  全部代码

 1 package com.xingoo.Commond;
 2 /**
 3  * 命令的触发者,发送命令
 4  * @author xingoo
 5  *
 6  */
 7 class Invoker{
 8     private Commond commond;
 9
10     public Invoker(Commond commond) {
11         this.commond = commond;
12     }
13
14     public void action(){
15         commond.excute();
16     }
17 }
18 /**
19  * 命令的接受者,负责接收命令,进行处理
20  * @author xingoo
21  *
22  */
23 class Receiver{
24
25     public Receiver() {
26
27     }
28
29     public void action(){
30         System.out.println("Action of receiver!");
31     }
32 }
33 /**
34  * 命令接口,定义命令的统一接口
35  * @author xingoo
36  *
37  */
38 interface Commond{
39     public void excute();
40 }
41 /**
42  * 具体的命令
43  * @author xingoo
44  *
45  */
46 class ConcreteCommond implements Commond{
47
48     private Receiver receiver;
49
50     public ConcreteCommond(Receiver receiver) {
51         this.receiver = receiver;
52     }
53
54     public void excute() {
55         receiver.action();
56     }
57
58 }
59 /**
60  * 客户端调用者
61  * @author xingoo
62  *
63  */
64 public class Client {
65     public static void main(String[] args) {
66         Receiver receiver = new Receiver();
67         Commond commond = new ConcreteCommond(receiver);
68         System.out.println("Commond register in here!");
69
70         try {
71             Thread.sleep(3000);
72         } catch (InterruptedException e) {
73             // TODO Auto-generated catch block
74             e.printStackTrace();
75         }
76
77         System.out.println("Commond excute in here!");
78         Invoker invoker = new Invoker(commond);
79         invoker.action();
80     }
81 }

View Code

  运行结果

Commond register in here!
Commond excute in here!
Action of receiver!

转载于:https://www.cnblogs.com/xing901022/p/4075013.html

【设计模式】—— 命令模式Commond相关推荐

  1. Python设计模式-命令模式

    Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...

  2. 设计模式 命令模式 实例_根据您的命令-命令设计模式

    设计模式 命令模式 实例 命令设计模式是一种广为人知的设计模式,属于行为设计模式("四人帮"的一部分). 顾名思义,它与应用程序中的动作和事件有关. 问题陈述: 假设有一个网页将在 ...

  3. C语言设计模式——命令模式

    C语言设计模式--命令模式 好处:让代码清晰明了,容易添加和删除,易维护. 哪些地方会用到命令模式?(列出几个常见的例子) 1.按键处理,每个按键按下得到一个索引(指的就是命令),一个按键对应一个处理 ...

  4. C语言实现设计模式—命令模式

    文章目录 C语言设计模式--命令模式 传统的实现方式如下:(伪代码) 命令模式优化 UML 用例说明 实现流程 command.h command.c main 总结 C语言设计模式--命令模式 好处 ...

  5. 游戏设计模式 - 命令模式在Unity中的应用(C#)

    游戏设计模式 - 命令模式在Unity中的应用(C#) 实测:这是一篇简单易懂的文章-> https://zhuanlan.zhihu.com/p/46937284

  6. C++设计模式——命令模式(command pattern)

    一.原理讲解 别名动作(action),事务(transaction). 1.1意图 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作 ...

  7. [Head First设计模式]餐馆中的设计模式——命令模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

  8. 小菜学设计模式——命令模式

    2019独角兽企业重金招聘Python工程师标准>>> 背景 外面小摊与店面的比较,你就会发现,店面似乎更加容易管理,为什么呢?因为在客户与老板自己新增了很多员工,这些员工各司其职, ...

  9. 设计模式 命令模式 之 管理智能家电

    继续设计模式哈,今天带来命令模式,二话不说,先看定义: 定义:将"请求"封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作. 这尼玛定义,看得 ...

  10. 设计模式- 命令模式

    Gof定义 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 理解 对命令模式我有一些肤浅的认识,也许是不对的.但我还是写一下.其实在 ...

最新文章

  1. sklearn GaussianNB(高斯朴素贝叶斯)模型使用RandomSearchCV获取最优参数及可视化​​​​​​​
  2. java final private_java – private final static属性vs private final属性
  3. DL之CNN优化技术:学习卷积神经网络CNN的优化、实践经验(练习调参)、从代码深刻认知CNN架构之练习技巧
  4. win7删除控制面板中的JAVA”
  5. 又到618,.NET 千万级秒杀架构到底有多牛
  6. 知识图谱需要解决的问题
  7. 写一个Android输入法01——最简步骤
  8. 程序员像瞎子,产品经理像跛子
  9. P1423 小玉在游泳(python3实现)
  10. Linux下OneinStack一键安装JAVA+PHP+Tomcat+Nginx+MySQL网站环境
  11. signal(SIGCLD,SIG_IGN)
  12. 计算机基础知识上机题,计算机基础上机题库.doc
  13. 电脑键盘灯光的调节方法
  14. 电视盒子ADB常用命令
  15. vue.js ElementUI /java 笔记
  16. PhotoShop - 建立剪切蒙版
  17. win10外接显示器频繁休眠
  18. 网络安全学习常用站点导航-持续更新中
  19. android sqlite 分词,sqlite3自定义分词器
  20. [1106]python bezier(贝塞尔)曲线

热门文章

  1. 40张图彻底揭秘:输入网址究竟发生了什么?
  2. 两难!到底用 Spring BeanUtils 还是 Apache BeanUtils?
  3. 最近学习了 HTTP 连接池
  4. Spring Boot 如何快速改造老项目?
  5. Spring Boot是如何实现自动配置的?
  6. 从滴滴出行业务中台实践聊聊如何构建大中台架构
  7. 这么说吧,Netty很简单,其实就是个Jar包,是作为通讯组件用的
  8. 多线程访问共享对象和数据的方式
  9. NanoHttpd源码分析
  10. 【Python】青少年蓝桥杯_每日一题_6.19_画风车