Command命令模式
简介:
简单来说,就像我们的复制、删除、插入等等都是命令,我们将命令封装为一个对象,并且支持撤销,将一系列命令串成一条链或者与链表结合使用,可以实现一系列的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命令模式相关推荐
- 设计模式学习笔记(十七)——Command命令模式
设计模式学习笔记(十七)--Command命令模式 Command命令模式介绍: Command命令模式是一种对象行为型模式,它主要解决的问题是:在软件构建过程中,"行为请求者"与 ...
- C++设计模式-Command命令模式
Command命令模式 作用:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 由于"行为请求者"与"行 ...
- Command(命令模式)
概述 在软件系统中,"行为请求者"与"行为实现者"通 常呈现一种"紧耦合".但在某些场合,比如要对行为进行"记录.撤销/重做.事务 ...
- [C++设计模式] command 命令模式
在软件系统中,"行为请求者"与"行为实现者"通常呈现一种"紧耦合". 但在某些场合,比方要对行为进行"记录.撤销/重做.事务&qu ...
- 步步为营 .NET 设计模式学习笔记 九、Command(命令模式)
概述 在软件系统中,"行为请求者"与"行为实现者"通常呈现一种"紧耦合".但在某些场合,比如要对行为进行"记录.撤销/重做.事务& ...
- Command(命令模式)行为型
这命令模式 一.概述 二.结构 三.实例 四.适用场景 五.优缺点 一.概述 描述:看电视时,只需要轻轻一按遥控器就能完成频道的切换,这就是命令模式,将换台请求和换台处理完全解耦了.电视机遥控器(命令 ...
- Command 命令模式
定义 命令模式是一种数据驱动的设计模式,它属于行为型模式. 请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令. 命令模式使 ...
- [设计模式] 15.Command 命令模式
我的理解: 命令池(采用堆或栈皆可)维护着一组命令集合. 只要这些命令实现同个命令接口或者命令抽象类,就能够被命令池依次执行. class App { static void Main() ...
- 设计模式之命令模式(Command)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
最新文章
- icps -lm 命令与 shmmax 的关系
- 用命令行为MySQL设置/修改管理员密码
- 【机器学习PAI实践九】如何通过机器学习实现云端实时心脏状况监测
- stm32 led屏控制卡_室内LED显示屏如何安装?
- 计算机设备记录人耳感知不到的声音,现代教育技术考试复习资料新
- 【pyqt5学习】——进度条progressBar
- 《软件需求分析(第二版)》第 15 章——变更管理 重点部分总结
- torch tensor去掉1维_浑身是刺的“维c之王”,有人管它叫“菠萝”,有人管它叫“梨”...
- 20160417_无为_常州
- 用 50 年前 NASA 送阿波罗上天的计算机挖矿是什么体验?
- 矩阵分析 (三) 矩阵的标准形
- JDBC连接效率问题
- 读书笔记三——你的灯亮着吗
- 测试必经之路(探索性测试)
- ROC评分中概念之阳性预测值/阴性预测值计算方法
- book mac pro怎么重装系统_苹果13英寸新MacBook Pro怎么重装win7系统
- python打开xls文件报错_python处理excel文件(xls和xlsx)
- Online Object Tracking: A Benchmark
- 深度学习推荐系统_深度推荐系统
- Dialog使用时has leaked window...that was originally added here错误