天天看点

[设计模式] 命令模式

[设计模式] 命令模式

命令模式实现

简单命令

批量命令

简单撤销

宏命令

标准撤销方式

总结

更多

手机用户请<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>,回复文章标题,获取本文相关源码和资源链接
[设计模式] 命令模式
知识星球(扫码加入获取历史源码和文章资源链接)
[设计模式] 命令模式

继续阅读