简介:

简单来说,就像我们的复制、删除、插入等等都是命令,我们将命令封装为一个对象,并且支持撤销,将一系列命令串成一条链或者与链表结合使用,可以实现一系列的do和undo

模式类图:

command: 抽象的命令类
X_Command、Y_Command、Z_Command: 具体的命令

使用场景:

我现在能想到的一般是在画图软件,办公软件,开发工具(IDE)当中比较常见的,毕竟作为一个码农,复制粘贴用的多了:)

模式实例:

比如我对一串字符串进行一系列的操作,我这个例子可能不太准确,角色划分不太明显,参考:https://www.cnblogs.com/meet/p/5116430.html
https://blog.csdn.net/qq_22764659/article/details/81335701

1、Content被操作的对象

package com.mashibing.command;
public class Content {String msg = "hello everybody ";;
}

2、Command抽象命令

package com.mashibing.command;
public abstract class Command {public abstract void doit();public abstract void undo();
}

3、InsertCommand插入命令:

package com.mashibing.command;
public class InsertCommand extends Command{Content c;String strToInsert="http://www.mashibing.com";public InsertCommand(Content c) {this.c = c;}@Overridepublic void doit() {c.msg = c.msg + strToInsert;}@Overridepublic void undo() {c.msg = c.msg.substring(0,c.msg.length()-strToInsert.length());}
}

4、CopyCommand 复制命令

package com.mashibing.command;
public class CopyCommand extends Command{Content c;public CopyCommand(Content c) {this.c = c;}@Overridepublic void doit() {c.msg = c.msg+c.msg;}@Overridepublic void undo() {c.msg = c.msg.substring(0,c.msg.length()/2);}
}

5、DeleteCommand删除命令

package com.mashibing.command;
public class DeleteCommand extends Command{Content c;String deleted;public DeleteCommand(Content c) {this.c = c;}@Overridepublic void doit() {deleted = c.msg.substring(0,5);c.msg = c.msg.substring(5,c.msg.length());}@Overridepublic void undo() {c.msg = deleted + c.msg;}
}

6、Main 测试

package com.mashibing.command;
import java.util.ArrayList;
import java.util.List;
/*** command模式一般跟责任链模式结合,实现一连串的undo* 也可以用双向链表的方式来做*/
public class Main {public static void main(String[] args) {Content c = new Content();//单个执行命令Command insertCommand = new InsertCommand(c);insertCommand.doit();insertCommand.undo();Command copyCommand = new CopyCommand(c);copyCommand.doit();copyCommand.undo();Command deleteCommand = new DeleteCommand(c);deleteCommand.doit();deleteCommand.undo();System.out.println(c.msg);//串在一起一连串执行List<Command> commands = new ArrayList<>();commands.add(new InsertCommand(c));commands.add(new CopyCommand(c));commands.add(new DeleteCommand(c));for(Command command : commands) {command.doit();}System.out.println(c.msg);//一连串撤回for (int i = commands.size()-1; i >=0; i--){commands.get(i).undo();}System.out.println(c.msg);}
}

测试结果:

Command命令模式相关推荐

  1. 设计模式学习笔记(十七)——Command命令模式

    设计模式学习笔记(十七)--Command命令模式 Command命令模式介绍: Command命令模式是一种对象行为型模式,它主要解决的问题是:在软件构建过程中,"行为请求者"与 ...

  2. C++设计模式-Command命令模式

    Command命令模式 作用:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 由于"行为请求者"与"行 ...

  3. Command(命令模式)

    概述 在软件系统中,"行为请求者"与"行为实现者"通 常呈现一种"紧耦合".但在某些场合,比如要对行为进行"记录.撤销/重做.事务 ...

  4. [C++设计模式] command 命令模式

    在软件系统中,"行为请求者"与"行为实现者"通常呈现一种"紧耦合". 但在某些场合,比方要对行为进行"记录.撤销/重做.事务&qu ...

  5. 步步为营 .NET 设计模式学习笔记 九、Command(命令模式)

    概述 在软件系统中,"行为请求者"与"行为实现者"通常呈现一种"紧耦合".但在某些场合,比如要对行为进行"记录.撤销/重做.事务& ...

  6. Command(命令模式)行为型

    这命令模式 一.概述 二.结构 三.实例 四.适用场景 五.优缺点 一.概述 描述:看电视时,只需要轻轻一按遥控器就能完成频道的切换,这就是命令模式,将换台请求和换台处理完全解耦了.电视机遥控器(命令 ...

  7. Command 命令模式

    定义 命令模式是一种数据驱动的设计模式,它属于行为型模式. 请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令. 命令模式使 ...

  8. [设计模式] 15.Command 命令模式

    我的理解: 命令池(采用堆或栈皆可)维护着一组命令集合. 只要这些命令实现同个命令接口或者命令抽象类,就能够被命令池依次执行. class App {     static void Main()   ...

  9. 设计模式之命令模式(Command)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

最新文章

  1. icps -lm 命令与 shmmax 的关系
  2. 用命令行为MySQL设置/修改管理员密码
  3. 【机器学习PAI实践九】如何通过机器学习实现云端实时心脏状况监测
  4. stm32 led屏控制卡_室内LED显示屏如何安装?
  5. 计算机设备记录人耳感知不到的声音,现代教育技术考试复习资料新
  6. 【pyqt5学习】——进度条progressBar
  7. 《软件需求分析(第二版)》第 15 章——变更管理 重点部分总结
  8. torch tensor去掉1维_浑身是刺的“维c之王”,有人管它叫“菠萝”,有人管它叫“梨”...
  9. 20160417_无为_常州
  10. 用 50 年前 NASA 送阿波罗上天的计算机挖矿是什么体验?
  11. 矩阵分析 (三) 矩阵的标准形
  12. JDBC连接效率问题
  13. 读书笔记三——你的灯亮着吗
  14. 测试必经之路(探索性测试)
  15. ROC评分中概念之阳性预测值/阴性预测值计算方法
  16. book mac pro怎么重装系统_苹果13英寸新MacBook Pro怎么重装win7系统
  17. python打开xls文件报错_python处理excel文件(xls和xlsx)
  18. Online Object Tracking: A Benchmark
  19. 深度学习推荐系统_深度推荐系统
  20. Dialog使用时has leaked window...that was originally added here错误

热门文章

  1. python wmi_python中wmi介绍和使用
  2. 谈恋爱与IT项目管理
  3. 带计算机功能的私有云,0成本,一步到位,不花钱也能搭建私有云!
  4. SpringMVC之国际化
  5. 日语学习,从入门到入坑---日语如何自学+常见问题
  6. Git 项目迁移yyl
  7. 【超干】用户画像产品化涵盖的功能模块以及应用场景
  8. Win8.1部署 .NET Framework 3.5 靠谱安装方式_Andy_Issta_新浪博客
  9. 沈阳房价还要涨的七个理由
  10. 嫣然细语,魂梦与君同