设计模式之~命令模式

定义:

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

为什么需要命令模式?

        在我们的软件开发系统中,行为请求者和真正的执行者通常都是一种紧耦合关系,但是这种情况下,当我们需要修改行为时,如需要撤销或者重做时,只能修改请求者的源代码,

        命令模式会通过在行为请求者和执行者之间引入一个抽象接口来将请求者和执行者进行解耦,这样如果需要修改行为时,只需要增加对应行为的命令就可以了,完全不需要修改请求者的源代码。通过在你的请求者和真正的执行者之间加上了一个中间人的角色,来达到分离耦合的目的。

        命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开。

命令模式的作用:

  • 第一,它能较容易地设计一个命令队列;

  • 第二,在需要的请情况下,可以较容易地将命令记入日志;

  • 第三,允许接收请求的一方决定是否要否决请求;

  • 第四,可以容易地实现对请求的撤销和重做;

  • 第五,由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易。还有就是,命令模式把请求一个操作对象与知道怎么执行一个操作的对象分割开。

结构图:

        调用者-Invoker

实例:

优点:

  • 通过引入中间件(抽象接口),解耦了命令请求与实现。降低了系统耦合度

  • 扩展性良好,可以很容易地增加新命令。新的命令可以很容易添加到系统中去。

  • 支持组合命令,支持命令队列。

  • 可以在现有命令的基础上,增加额外功能,比如日志记录,结合装饰器模式会更加灵活

缺点:

  • 具体命令类可能过多。

  • 命令模式的结果其实就是接收方的执行结果,但是为了以命令的形式进行架构、解耦请求与实现,引入额外类型结构(引入请求方与抽象命令接口)。

  • 增加了理解上的困难。不过这也是设计模式的通病抽象必然会额外增加类的数量;代码抽离肯定比代码聚合更难理解。

适用场景:

  • 现实语义中存在具备“命令”的操作,如:dos命令,shell命令

  • 数据库中的事务机制的底层实现

  • 需要支持命令宏(即命令组合)操作。

  • 命令的撤销和恢复:增加相应的撤销和恢复命令的方法(比如数据库中的事务回滚)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/256630.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

c++ 11标准模板(STL) std::map(九)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

Linux常用命令——gzexe命令

在线Linux命令查询工具 gzexe 用来压缩可执行文件 补充说明 gzexe命令用来压缩可执行文件&#xff0c;压缩后的文件仍然为可执行文件&#xff0c;在执行时进行自动解压缩。当您去执行被压缩过的执行文件时&#xff0c;该文件会自动解压然后继续执行&#xff0c;和使用一般的…

设计模式之~组合模式

组合模式&#xff1a; 将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 结构图&#xff1a; 实例&#xff1a; 透明方式&#xff1a; leaf中也有add和remove叫做透明方式&#xff0c;在component中声明所有用来管…

玩具租借小程序

玩具是儿童的必需品&#xff0c;家长每年都会给孩子购买少则几百多则几千的玩具&#xff0c;但是由于孩子对玩具喜新 厌旧&#xff0c;一个几百元的玩具几天就不感兴趣了&#xff0c;而市场上层出不穷的高价玩具及孩子对玩具永不满足的渴求&#xff0c;都在促使家长对"玩具…

租号网程序源码 无错版本完整无缺

介绍&#xff1a; 注意事项&#xff1a; 安装租号程序 需要WIN08服务器 iis7.0 sq2012 NET4.6 程序直接放入设置好的 网站根目录即可 (SA密码设置yixiaoka888) 网盘下载地址&#xff1a; http://kekewl.cc/tJoeIk6qPlJ 图片&#xff1a;

在线游戏租号声优陪玩网站源码+威客平台源码/亲测

正文: 由于标题太长了&#xff0c;所以本文标题简略写了&#xff0c;下方图片才是程序完整标题: 这系统界面美观&#xff0c;功能非常齐全&#xff0c;已对接支付&#xff0c;亲测可用&#xff0c;有详细的安装教程&#xff0c;全部放压缩包里了&#xff0c;有兴趣自己去看。 …

麒麟子出了一款免费3D角色虚拟摇杆控制器!这也太好用了

不需要编写代码&#xff0c;通过简单的拖拽和配置&#xff0c;就可以使你在手机上控制摄像机旋转和操作角色。 EasyJoystick EasyCamera EasyTouch 以上效果就 麒麟子 最近在 Cocos Store 分享的 KylinsEasyController 组件源码&#xff0c;它包含以下主要特性&#xff1a; 虚拟…

租赁小程序源码芝麻免押租机平台手机租赁代运营

租赁小程序 手机租赁 小程序代运营 租赁 免押租 代运营 上征信 银行风控 芝麻免押 支付宝服务商 支付宝租赁服务商 租赁平台源码 租赁小程序源码 租机平台源码 手机租赁源码 租赁小程序源码 芝麻免押租 租赁平台 小程序源码

如何在雷电模拟器里使用YiLu代理的动态ip?

1在易路“程序”页面里随意添加一个应用&#xff0c;请不要添加“雷电”到YiLu程序里&#xff1b; 2.YiLu设置&#xff1a; ① 点击YiLu“设置”页面&#xff1b; ② 选择“YiLu便携代理引擎”&#xff1b; ③ 选择“仅代理YiLu程序选项卡中的应用程序&#xff0c;其他通过您…

原神抢码,米游社抢码-首发

本文章仅供学习使用-侵权请联系删除_2023年3月14日08:17:06 本来在深渊12层打不过的我偶然在刷到了一个dy的直播间&#xff0c;看到主播在抢码上号帮忙打深渊还号称痛苦号打不满不送原石的旗号我就决定扫码试试&#xff0c;在直播间内使用了两部手机互相扫码在扫了一下午的码后…

腾讯大王卡扫号器

正文开始》》花莳王卡扫号器不做任何收益动作&#xff0c;要过年了坑逼多。该信息可以让你自行辨别是否交智商费《正文结束 --------------------------------------------------------------------------------------------------------------------------------------------…

剖析CPU性能火焰图生成的内部原理

关注开发内功修炼&#xff0c;掌握硬核技术原理 大家好&#xff0c;我是飞哥&#xff01; 在进行CPU性能优化的时候&#xff0c;我们经常先需要分析出来我们的应用程序中的CPU资源在哪些函数中使用的比较多&#xff0c;这样才能高效地优化。一个非常好的分析工具就是《性能之巅…

上号神器|王者扫码登录教程,苹果安卓通用扫码教程(建议收藏)

大家好&#xff0c;我是上号神器&#xff0c;很多玩王者的小伙伴都不知道怎么通过扫码进行登录王者&#xff0c;下面就为大家说下上号神器的使用教程&#xff0c;不用卸载微信也能登录王者号&#xff0c;十分地方便快捷&#xff01; 首先玩家需要进入上号神器地址&#xff08;…

多家游戏交易平台发声,禁止未成年人买号租号

游戏租号绕开防沉迷系统事件迎来下文。9 月7 日&#xff0c;DD3737、交易猫、5173 等游戏交易平台相继发布声明&#xff0c;已采取严格措施禁止任何未成年人利用游戏交易平台买卖和租赁游戏账号。 同时&#xff0c;上述游戏交易平台还呼吁&#xff1a;游戏出版、发行、运营、交…

app账号退不出去_怎么去和平精英租号平台APP上租号玩和平精英

怎么去和平精英租号平台APP上GG租号租玩和平精英了&#xff1f;首选给大家讲解下和平精英租号平台App的一些功能介绍。 租号平台app可以让用户在这个平台上&#xff0c;拥有武器和皮肤的软件平台&#xff0c;用户有了这款软件后&#xff0c;就在也不用充钱来购买武器和装备&…

租号玩上号器显示服务器繁忙,租号玩出现错误1003是怎么回事?

2007-06-20 我还几天前把自己的帐号自己锁了然后我去登陆游戏社区但上面老显示验证码错误我就换个号上但无论我登陆什么号都上不了怎么办最后我新建一个号但建不了了验证码老错误可我明明输入对了啊大小写都试过不知道怎么回事我就等几天以为是系统问题可是还是不行老显示验证码…

Go开发学习 | 如何快速读取json/yaml/ini等格式的配置文件使用示例

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1a;[ https://www.weiyigeek.top ] 博客&…

Kafka笔记

1. MQ产品对比 ActiveMQRabbitMQRocketMQKafkaEMQ公司/社区ApacheRabbit&#xff08;https://www.rabbitmq.com/&#xff09;阿里&#xff08;https://rocketmq.apache.org/&#xff09;Apache&#xff08;http://kafka.apache.org/ &#xff09;EMQ X(https://www.emqx.cn/)开…

以支付宝为例,聊聊Web安全的三个攻防姿势

我们最常见的Web安全攻击有以下几种 XSS 跨站脚本攻击CSRF 跨站请求伪造clickjacking 点击劫持/UI-覆盖攻击 下面我们来逐个分析 一、XSS 跨站脚本攻击 跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;&#xff0c;为了不和层叠样式表&#xff08;Cascading Styl…

详解.NET IL代码

IL是什么&#xff1f; Intermediate Language &#xff08;IL&#xff09;微软中间语言 C#代码编译过程&#xff1f; C#源代码通过LC转为IL代码&#xff0c;IL主要包含一些元数据和中间语言指令&#xff1b; JIT编译器把IL代码转为机器识别的机器代码。如下图 语言编译器&am…