命令模式(Command)

1. 模式的定义

电脑开机的几个过程:1. 加载电源 2. 设备检查 3. 装载系统

客户端只是想要发出命令或者请求,不关心请求的真正接收者是谁,也不关心具体如何实现,而且同一个请求的动作可以有不同的请求内容,当然具体的处理功能也不一样,该怎么实现?

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

2. UML图

Command:定义命令的接口,声明执行的方法

ConcreteCommand:命令接口对象,通常会持有接收者,并调用接收者的功能来完成命令要执行的操作

Receiver:接收者,真正执行命令的对象

Invoker:要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象,这个是客户端真正触发命令并要求命令执行相应操作的地方

Client:创建具体的命令对象,并且设置命令对象的接受者。

代码:

3. 研磨设计模式

1) 命令模式的关键:把请求封装成对象,也就是命令对象,并定义统一的执行操作的接口,这个命令对象可以被存储,转发,记录,撤销和处理等

2)参数化配置:可以用不同的命令对象,去参数化配置客户的请求 比如说重启和开始按钮,虽然按下的是同一个按钮,相当于同一个请求,但是为请求配置不同的按钮对象,就会执行不同的功能

3)可撤销操作的意思:放弃该操作,回到未执行该操作前的状态。 两种思路:1. 补偿式 2. 存储恢复式

4) 宏命令:包含多个命令的命令,是命令的组合。

5)队列请求:对命令对象进行排队,组成工作队列,然后依次取出命令对象来执行。

6)日志请求:就是把请求的历史记录保存下来,一般采用永久存储的方式。

7)命令模式的本质:封装请求,把请求对象封装成为命令对象,然后可以对这个对象进行一系列的处理。

原文发布于微信公众号 - JAVA高级架构(gaojijiagou)

原文发表时间:2018-04-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端小叙

nodejs的package.json依赖dependencies中 ^ 和 ~ 的区别

nodejs的package.json定义了一个模块,包括其依赖关系的一个简单的JSON文件,该文件可以包含多个不同的指令来告诉Node包管理器如何处理模块。 ...

30390
来自专栏散尽浮华

zabbix监控主机cpu达到80%后报警

在zabbix监控中,默认cpu监控模板中的触发器,当负载在一定时间内(比如最近5分钟)超过5以上为报警阀值。但是在实际场景中,由于服务器配置不一样,这个默认的...

39160
来自专栏优启梦

文章内的新浪短网址https无法访问解决办法!

大家都知道最近新浪短网址出问题了! 以前蓝奏云、文章分享出来的地址都是https://t.cn的 导致丢失好多量! 一个一个修改太麻烦了,我们只能暂时将 htt...

45670
来自专栏偏前端工程师的驿站

Vim杂记:markdown插件

一、安装插件                                 从以下地址下载压缩包   github下载:https://github.com...

215100
来自专栏电光石火

微信登陆代码

网页访问 https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_u...

46370
来自专栏IMWeb前端团队

Node基础:域名解析DNS(ok)

写在前面 Nodejs学习手册,基础总结之DNS模块。对从事web开发的同学来说,DNS解析再熟悉不过,在nodejs中也有一个模块可以完成dns解析的工作,使...

29760
来自专栏凉城

文章内的新浪短网址https无法访问解决办法!

24740
来自专栏Brian

Install Python3.6.x on CentOS7

---- 概述 在之前的文章中,我已经介绍了在CentOS6中安装Python2.7.x和Python3.4.x。请参考源码编译安装或者升级Python在Cen...

1.1K60
来自专栏13blog.site

springboot开启access_log日志输出

由于在调试时需要查看access_log日志,但是springboot默认并没有开启,因此查看了一下文档,在springboot的配置文件中添加如下设置,即可将...

57850
来自专栏Java学习123

备忘几个有用的shell脚本

28680

扫码关注云+社区

领取腾讯云代金券