美文网首页
2 命令模式

2 命令模式

作者: 6cc89d7ec09f | 来源:发表于2018-10-11 16:23 被阅读30次

1 什么是命令模式?

  • 难点

1 需要弄懂什么是命令模式
2 搞懂命令模式的核心是什么
3 看懂命令模式的Demo

  • 定义

命令模式的定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

  • 核心

阅读设计模式,要记得取其精华,用于变通,命令模式的核心就是:
1 将请求封装成了对象
2 对多个请求进行管理,进行队列操作,撤销操作等

2 命令模式常用的几个类

借用图


image.png

Command:定义命令的接口,声明执行的方法.以及撤销方法(相当于Runnable)
ConcreteCommand:命令接口对象,通常会持有接收者,并调用接收者的功能来完成命令要执行的操作(相当于Runnable的实现)
Receiver:接收者,真正执行命令的对象(相当于Thread类)
Invoker:要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象,这个是客户端真正触发命令并要求命令执行相应操作的地方(相当于ThreadPool类,管理了任务队列)
Client:创建具体的命令对象,并且设置命令对象的接受者。(在Spring框架下,这个角色可以省略)

3 命令模式的简单Demo

点击标题查看代码

4 命令模式的应用场景

  • Multi-level undo 多级undo操作

如果系统需要实现多级回退操作,这时如果所有用户的操作都以command对象的形式实现,系统可以简
单地用stack来保存最近执行的命令,如果用户需要执行undo操作,系统只需简单地popup一个最近的
command对象然后执行它的undo()方法既可。

  • Transactional behavior简单的原子事务行为

借助command模式,可以简单地实现一个具有原子事务的行为。当一个事务失败时,往往需要回退到执
行前的状态,可以借助command对象保存这种状态,简单地处理回退操作。

  • Progress bars(状态条)

假如系统需要按顺序执行一系列的命令操作,如果每个command对象都提供一个 getEstimatedDuration()方法,那么系统可以简单地评估执行状态并显示出合适的状态条。

  • Thread pools(线程池)

通常一个典型的线程池实现类可能有一个名为addTask()public方法,用来添加一项工作任务到任务
队列中。该任务队列中的所有任务可以用command对象来封装,通常这些command对象会实现一个通用的 接口比如java.lang.Runnable。

  • Macro recording(宏纪录,请求记录)

可以用command对象来封装用户的一个操作,这样系统可以简单通过队列保存一系列的command对象的状态就可以记录用户的连续操作。这样通过执行队列中的command对象,就可以完成"Play back"操作了.
比如:对于大型的数据结构操作,无法在每次发生改变时就进行保存(数据量太大),但是可以保存每次操作的日志.并持久化.如果操作出问题了,可以查询检查点之后的日志,并执行一遍,来恢复最新状态

  • Networking 网络请求

通过网络发送command命令到其他机器上运行。
比如:rpc调用,servlet请求等.或多或少都有用到命令模式的一些影子,但没有完全照搬命令模式,会有一定程度的变种

  • Parallel Processing(并发处理)

当一个调用共享某个资源并被多个线程并发处理时。
比如:多线程对同一把锁的竞争时,会在同一个等待队列上

5 命令模式的 撤销Demo

查看HeadFirst 设计模式 封装调用:命令模式

相关文章

  • ubuntu16.04 hadoop Namenode mode

    1.查看安全模式命令 2.解除安全模式命令 3.启动安全模式命令

  • 2 命令模式

    1 什么是命令模式? 难点 1 需要弄懂什么是命令模式2 搞懂命令模式的核心是什么3 看懂命令模式的Demo 定义...

  • Linux vi 基本操作

    进入或退出 1.进入vi 2.退出vim 3.切换命令模式 三种模式 1、命令模式 2、输入模式 3、特殊模式

  • Vim用法总结

    1、命令模式(normal模式) 2、编辑模式(insert模式) 3、选择模式

  • 第九次早课

    早课问题及答案 第九次早课 1、vi三种模式 2、命令行模式进入编辑模式的命令 3、编辑模式退出到命令行模式的命令...

  • Python 简单命令运行

    命令行模式和Python交互模式 1命令行模式 在Windows开始菜单选择“命令提示符”,就进入到命令行模式 2...

  • 命令模式(2)

    实现undo和redo-------基于Unity3D 在命令模式(1)中,我们已经知道了什么是命令模式,一个命令...

  • 使用命令模式重构播放器控制条

    本文节选自《设计模式就该这样学》 1命令模式的UML类图 命令模式的UML类图如下图所示。 2使用命令模式重构播放...

  • vim常用操作

    1 i :命令模式进入插入模式(当前光标前插入字符) 2 a :命令模式进入插入模式(当前光标后插入字符) 3 o...

  • Day-7vim编辑器及vi编辑器的使用

    1.vim编辑器 四种模式 普通模式 命令模式 编辑模式 视图模式 1.普通模式 1)普通模式下的命令跳转光标 2...

网友评论

      本文标题:2 命令模式

      本文链接:https://www.haomeiwen.com/subject/wpvbaftx.html