前言:【模式总览】——————————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();
} }

  全部代码

 package com.xingoo.Commond;
/**
* 命令的触发者,发送命令
* @author xingoo
*
*/
class Invoker{
private Commond commond; public Invoker(Commond commond) {
this.commond = commond;
} public void action(){
commond.excute();
}
}
/**
* 命令的接受者,负责接收命令,进行处理
* @author xingoo
*
*/
class Receiver{ public Receiver() { } public void action(){
System.out.println("Action of receiver!");
}
}
/**
* 命令接口,定义命令的统一接口
* @author xingoo
*
*/
interface Commond{
public void excute();
}
/**
* 具体的命令
* @author xingoo
*
*/
class ConcreteCommond implements Commond{ private Receiver receiver; public ConcreteCommond(Receiver receiver) {
this.receiver = receiver;
} public void excute() {
receiver.action();
} }
/**
* 客户端调用者
* @author xingoo
*
*/
public class Client {
public static void main(String[] args) {
Receiver receiver = new Receiver();
Commond commond = new ConcreteCommond(receiver);
System.out.println("Commond register in here!"); try {
Thread.sleep();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} System.out.println("Commond excute in here!");
Invoker invoker = new Invoker(commond);
invoker.action();
}
}

  运行结果

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

【设计模式】—— 命令模式Commond的更多相关文章

  1. linkin大话设计模式--命令模式

    linkin大话设计模式--命令模式 首先考虑一种应用情况,某个方法需要完成某一个功能,这个功能的大部分功能已经确定了,但是有可能少量的步骤没法确定,必须等到执行这个方法才可以确定. 也就是说,我们写 ...

  2. 【设计模式】Java设计模式 - 命令模式

    Java设计模式 - 命令模式 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目录 Ja ...

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

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

  4. JAVA 设计模式 命令模式

    用途 命令模式 (Command) 将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化:对请求排队或请求日志,以及支持可撤销的操作. 命令模式是一种行为型模式. 结构

  5. 深入浅出设计模式——命令模式(Command Pattern)

    模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请 ...

  6. Java设计模式-命令模式(Command)

    命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行.这个过程好在,三者相互解耦,任何一方都不用去依赖其 ...

  7. 设计模式--命令模式(Command)

    基本概念:  Command模式也叫命令模式 ,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数,命令模式将方法调用给封装起来了. 命令模式的 ...

  8. javascript设计模式——命令模式

    前面的话 假设有一个快餐店,而我是该餐厅的点餐服务员,那么我一天的工作应该是这样的:当某位客人点餐或者打来订餐电话后,我会把他的需求都写在清单上,然后交给厨房,客人不用关心是哪些厨师帮他炒菜.餐厅还可 ...

  9. C++设计模式——命令模式

    什么是命令模式? 在GOF的<设计模式:可复用面向对象软件的基础>一书中对命令模式是这样说的:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以 ...

  10. 浅谈js设计模式 — 命令模式

    命令模式最常见的应用场景是:有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么.此时希望用一种松耦合的方式来设计程序,使得请求发送者和请求接收者能够消除彼此之间的耦 ...

随机推荐

  1. 安装ubuntu系统 ——分区

    安装ubuntu 系统主要分四个区 目录 建议大小 格式 描述 / 10G-20G ext4 根目录 swap <2048M swap 交换空间 /boot 400M左右 ext4 Linux的 ...

  2. day44

    今日内容: 1.前端概述 2.前端三剑客 3.页面基本结构 4.常用标签 5.标签分类 1.前端概述与前端三剑客 前端即⽹站前台部分,运⾏在PC端,移动端等浏览器上展现给⽤户浏览的⽹⻚.随着互联⽹技术 ...

  3. python中安装Tensorflow

    执行命令:pip install --upgrade tensorflow 即可.

  4. iOS Swift WisdomScanKit图片浏览器功能SDK

    iOS Swift WisdomScanKit图片浏览器功能SDK使用 一:简介      WisdomScanKit 由 Swift4.2版编写,完全兼容OC项目调用. WisdomScanKit的 ...

  5. Java基础—基础语法与常用命令

    一.基础语法 1.case不加break会有穿透效果 根据阿里规范,严禁省略default语句,即使它一句话也没有 2.for循环执行顺序: for(初始化1;条件2;迭代运算3){ 循环体4: } ...

  6. EasyUI-Tree的使用

            在web开发中,树是比较常见的东西.以前用过zTree,也用过EasyUI-Tree,过了好久后发现都忘记怎么用了. 这几天重新回顾了EasyUI-tree的使用,在此将相关知识点记录 ...

  7. Retry模式

    Retry模式能够通过重复之前失败的操作来处理那些在调用远端服务或者网络资源的时候发生的一些可以预期的临时性的错误.Retry模式可以提高应用的稳定性. 问题 应用中,负责链接其他服务的组件必须要对环 ...

  8. 5、JVM的监控与分析工具

    一.JPS(虚拟机进程监控工具) 二.jstat:虚拟机统计信息监视工具 例子:jstat -gcutil 16478 s0:区域占比2.33%: s1占比0.00%: E:伊甸园区 : O:老年区: ...

  9. helloworld讲解cocos2d-x的编程思路与要点

    用helloworld讲解cocos2d-x的编程思路与要点 本文以cocos2d-x的helloworld为例,讲解cocos2d-x引擎的特点和要点,2.2为了展示新功能,把包括屏幕自适应在内的新 ...

  10. springboot 设置 session 过期时间

    application.properties server.session.timeout=86400 #单位(s) 这里是24小时