执行一步操作后,回滚或撤销

public abstract class Command {public abstract void doit(); //exec runpublic abstract void undo();
}
public class Content {String msg = "hello everybody ";
}
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);}
}
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;}
}
public class InsertCommand extends Command {Content c;String strToInsert = "http://www.zhangxueliang.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());}
}

测试

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);insertCommand.doit();insertCommand.undo();Command deleteCommand = new DeleteCommand(c);deleteCommand.doit();deleteCommand.undo();List<Command> commands = new ArrayList<>();commands.add(new InsertCommand(c));commands.add(new CopyCommand(c));commands.add(new DeleteCommand(c));for(Command comm : commands) {comm.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. 设计模式篇之——命令设计模式

    命令设计模式很多人看了官方的文档是不够清晰的,甚至看了一遍基本记不住,说简单的谈不上,说难的话就那么一点代码,所以思想很重要,经过自己摸索后的一些理解,本文用最形象深刻的例子来带大家深刻理解命令设计模 ...

  4. Java设计模式(六):命令设计模式

    1.应用场景 有时候需要向某些对象发送请求,但是并不知道请求的接受者是谁,也不知道请求的操作是什么,将'对象的请求者'从'命令的执行者'中解耦.使用此模式的优点还在于,command对象拥有更长的生命 ...

  5. java命令模式_Java中的命令设计模式

    java命令模式 在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象 ...

  6. 设计模式示例_命令设计模式示例

    设计模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原因 ...

  7. Java中的命令设计模式

    在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象之间. 发送者对象 ...

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

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

  9. 根据您的命令-命令设计模式

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

最新文章

  1. java实现收货7天发通知,Java实训的第7天
  2. php isset()与empty()详解
  3. oracle sum 数据类型,五、Oracle内置函数
  4. mac安装软件管理Android手机,Mac如何管理Android手机:这方式很得体
  5. 页面间传输中文的乱码解决方法
  6. 查看静态链接和动态链接
  7. 均匀白噪声的定义及特点_噪声的物理本质是什么?
  8. pdmreader读写注册表失败_用PDMreader
  9. 结对开发Ⅴ——循环一维数组求和最大的子数组
  10. Objective-C超高精度的计时器
  11. 华为杨超斌:5G千元机有望明年底上市
  12. java类和对象的基础(笔记)
  13. web开发技术复习笔记
  14. LNMP环境SVN钩子脚本的使用
  15. 冲突等价(ConflictEquivalence) 可串行化调度(Serializable Schedules)
  16. 如何使用mp3转换器将wav转换成mp3格式
  17. 如何快速备份微信聊天记录到电脑
  18. 如何区分直连串口线和交叉串口线
  19. 投影仪家用推荐最新?投影仪什么牌子性价比比较高
  20. 安森美推出新的高功率图腾柱PFC控制器,满足具挑战的能效标准

热门文章

  1. 【CV】MTCNN:3个CNN,胜过1个诸葛亮
  2. 【算法基础】数据结构导论第三章-栈、队列和数组.pptx
  3. AI基础:Numpy简易入门
  4. 报名|极市X机器之心 2018计算机视觉最具潜力开发者榜单
  5. LightGBM如何保存模型?
  6. 互联网1分钟 |1211
  7. 游戏的社交与延伸:怎样把玩家连结起来?
  8. 分享B2B信息发布小技巧
  9. 使用ASP.NET AJAX 1.0框架PreviewGlitz进行网页动画编程
  10. Struts2.5版本之后Tomcat启动报错问题