设计模式(C++实现)之Command
来源:互联网 发布:快递不送货上门 知乎 编辑:程序博客网 时间:2024/04/30 22:26
将一组行为定义为一个命令,供外部调用,方便命令执行
也可以将命令进行记录,方便进行Undo操作
经典的Command模式
看看一个生活中的例子,使用遥控器操作电视。将遥控器的各个按钮定制为命令,遥控器只需执行按下操作即可完成电视控制。
代码1:ICommand接口与其实例类
命令的具体类需要依赖命令的接收者,这样才可以对接收者进行操作,这里的接收者(Receiver为电视),还可以定义其他按键操作的逻辑,比如说换台,但这样需要定义的命令就太多了(这也是这个模式的缺点之一,类膨胀)
代码2:RemoteControl类,命令执行者(Invoker)
设置好命令后,执行OnBtnPressed,即完成遥控对电视的控制。
代码3:Television类,命令接收者(Receiver)
代码4:主函数(Client)
接下来我们看看GOF的类图和此例的类图吧,看看能不能将两个图的类比上~
图1:GOF类图
图2:例子的类图
RomoteControl(遥控器)就是GOF中的Invoker, Television就是Receiver。Client就是代码4中的主函数。
添加Undo操作的类改造
在命令中记录命令执行时的环境状态,并实现Undo的方法,然后将命令整体打包存储在队列中,在外部需要回滚时,取出命令,执行Undo操作。
代码5:改造ICommand接口
代码6:改造TurnOnOffCommand类
代码7:改造ChangeInputModeCommand类
其中的m_memo就是用来记录命令执行前的状态便于在Undo执行时进行回滚。这里只是举了一个最简单的情况记录环境,抛砖引玉。
代码8:改造RemoteControl类
代码9:添加Undo的执行
图3:带Undo的Command的类图
- 设计模式(C++实现)之Command
- 设计模式(c++)笔记之十九(Command模式)
- 设计模式 command模式 (c++)
- 常见设计模式的解析和实现(C++)之十四-Command模式
- 常见设计模式的解析和实现(C++)之十四-Command模式
- 常见设计模式的解析和实现(C++)之十四-Command模式
- 设计模式之Command(命令模式)
- 【设计模式】之命令模式(Command)
- 设计模式之命令模式(Command)
- 设计模式之(Command)命令行模式
- 设计模式之Command模式(笔记)
- 设计模式之命令模式(Command)
- 设计模式之命令模式(Command)
- 设计模式之Command
- 设计模式之Command
- 设计模式之Command
- 设计模式之Command
- 设计模式之Command
- Winform中DataGridVieW进行ContextMenuScript操作获取右键选定行指定列的值
- mysql基本命令
- CSS解决未知高度垂直居中方法
- CSS解决未知高度垂直居中方法
- C程序设计语言(第2版)摘要
- 设计模式(C++实现)之Command
- VC 数字转化为十六进制字符串
- iis应用程序池 内存溢出错误 System.OutOfMemoryException
- GCC编译C程序需要注意文件名后缀的问题
- VC获取本机计算机名
- [QTP] Add-in manager的学习
- linux--ssh
- Oracle锁机制锁问题的详细分析
- ORACLE里锁