[设计模式] 命令模式
命令模式实现
简单命令
批量命令
简单撤销
宏命令
标准撤销方式
总结
更多
手机用户请<code>横屏</code>获取最佳阅读体验,<code>REFERENCES</code>中是本文参考的链接,如需要链接和更多资源,可以关注其他博客发布地址。
平台
地址
CSDN
https://blog.csdn.net/sinat_28690417
简书
https://www.jianshu.com/u/3032cc862300
个人博客
https://yiyuery.github.io/NoteBooks/
命令模式 将请求封装成对象,这可以让你使用不同的请求、队列或者是日志请求来参数化其他对象。命令模式一般支持定义撤销操作。
首先来让我们实现一个能开灯的遥控命令场景。

定义一个开灯的命令接口实现:
定义一个遥控器:
<code>Ex.1</code>
如果是需要一组命令的执行呢?
<code>补充定义</code>一个命令<code>NoCommand</code>,用于默认命令的信息打印。
<code>Ex.2</code>
定义两组命令,每次在执行开启操作前将对应的关闭操作写入缓存变量,在执行撤销方法时,执行即可。
<code>Ex.3</code>
定义一组命令的执行,类似于 MicroSoft 常用的宏定义函数一样
假定我们定义一个宏命令实现回家后的一个智能操作:包含开灯和开电视,并要求它支持撤销能力。
<code>Ex.4</code>
针对于命令场景的撤销操作,其实我们可以直接定义一个<code>undo</code>操作接口在<code>Command</code>中,此处考虑到演示的代码结构,我们在补充一个接口继承<code>Command</code>来实现
对应的undo方式执行也调整下实现:
<code>Ex.5</code>
模式特点
将发出请求的对象和执行的对象解耦
被解耦的两者之间是通过命令对象之间进行沟通的,命令对象封装了接受者和一个/组动作
调用者通过调用命令对象的<code>execute</code>发出请求,后者根据这个进行响应
调用者可以接受命令当做传入的参数,甚至在运行时动态地进行
命令还支持撤销操作的定义,做法是实现一个<code>undo</code>方法来回到<code>execute</code>被执行前的状态
宏命令是命令的一种简单延伸,允许调用多个命令
敲黑板 !!!!
命令模式致力于发送请求和执行请求的对象解耦操作!
扫码关注<code>架构探险之道</code>,回复文章标题,获取本文相关源码和资源链接
知识星球(扫码加入获取历史源码和文章资源链接)