Command(命令)--对象行为型模式

Command(命令)–对象行为型模式

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

二、动机
1.在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合——比如需要对行为进行“记录、撤销、重做(undo、redo)、事物”等处理,这种无法抵御变化的紧耦合是不合适的。
2.在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。

三、适用性
1.抽象出待执行的动作以参数化某对象。你可用过程语言中的回调(callback)函数表达这种参数化机制。Command模式是回调机制的一个面向对象的替代品。
2.在不同的时刻指定、排列和执行请求。一个Command对象可以有一个与初试请求无关的生存期。如果一个请求的接受者可用一种与地址空间无关的方式表达,那么就可将负责该请求的命令对象传递给另一个不同的进程并在那儿实现该请求。
3.支持取消操作。Command的Execute操作可子啊实施操作前将状态存储起来,在取消操作时这个状态用来消除该操作的影响。Command接口必须添加一个Unexecute操作,该操作取消上一次Execute调用的效果。执行的命令被存储子啊一个历史列表中。可通过向后和向前遍历者一列表并分别调用Unexecute和Execute来实现重数不限的“取消”和“重做”。
4.支持修改日志,这样当系统奔溃时,这些修改可用被重做一遍。在Command接口中添加装载操作和存储操作,可以用来保持变动的一个一致的修改日志。从奔溃中恢复的过程包括从磁盘中重新读入记录下来的命令并用Execute操作重新执行它们。
5.用构建在原语操作上的高层操作构造一个系统。这样一种结构在支持事务的信息系统中很常见。一个事务封装了对数据的一组变动。Command模式提供了对事务进行建模的方法。Command有一个公共的接口,使得你可以用同一种方式调用所有的事务。同时使用该模式也易于添加新的事务以扩展系统。

四、结构
在这里插入图片描述

五、效果
1.Command模式将调用操作的对象与知道如何实现该操作的对象解耦。
2.Command是头等的对象。它们可像其他的对象一样被操作和扩展。
3.你可将多个命令装配成一个复合命令。
4.增加新的Command很容易,因为这无需改变已有的类。

六、实现
1.一个命令对象应达到何种智能程度。
2.支持取消(undo)和重做(redo)。
3.避免取消操作过程中的错误积累。
4.使用C++模版。

七、要点总结
1.Command模式的根本目的在于将“行为请求者”与“行为实现者”解耦,在面向对象的语言中,常见的实现手段是“将行为抽象为对象”。
2.实现Command接口的具体命令对象ConcreteCommand有时候根据需要可能会保存一些额外的状态信息。通过使用Composite模式,可以将多个“命令”封装为一个“复合命令”。
3.Command模式与C++中的函数对象有些类似。但两者的定义行为接口的规范有所区别:Command以面向对象中的“接口-实现”来定义行为接口规范,更严格,但有性能损失;C++函数对象以函数签名来定义行为接口规范,更灵活,性能更高。

八、相关模式
Composite模式可被用来实现宏命令。
Memento模式可用来保持某个状态,命令用这一状态来取消它的效果。
在被放入历史表列前必须被拷贝的命令起到一种原型的作用。

九、举例说明
命令模式类似于消息。

本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现业务数据的同步迁移 · 思路一

(好雨知时节,大雨 _ _ _)时不时的呢,会有小伙伴问我这样的问题:1、群主,你的.tsv文件是如何生成的?2、在线项目数据和种子数据的不一样,可以下么?3、如果我本地的数据开发…

Interpreter(解释器)--类行为型模式

Interpreter(解释器)–类行为型模式 一、意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 二、动机 1.在软件构建过程中,如果某一特定领域的问题比…

基于.NetCore3.1系列 —— 认证授权方案之授权揭秘 (下篇)

一、前言回顾:基于.NetCore3.1系列 —— 认证授权方案之授权揭秘 (上篇)在上一篇中,主要讲解了授权在配置方面的源码,从添加授权配置开始,我们引入了需要的授权配置选项,而不同的授权要求构建不同的策略方式&#xff0…

Iterator(迭代器)--对象行为模式

Iterator(迭代器)–对象行为模式 一、意图 提供一种方法顺序访问一个聚合对象的各个元素,而又不需暴露该对象的内部结构。 二、动机 1.在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望…

Blazor带我重玩前端(三)

VS自带的Blazor模板介绍需要升级VS2019以及.NET Core到最新版(具体的最低支持,我已经忘了,总是越新支持的就越好),以更好的支持自己开发Blazor项目。使用VS创建Blazor WebAssembly项目搜索Blazor模板选择Blazor WebAss…

[mybatis]Configuration XML_environments

enviroments transactionManager There are two TransactionManager types (i.e. type"[JDBC|MANAGED]") that are included with MyBatis: • JDBC – This configuration simply makes use of the JDBC commit and rollback facilities directly. It relies on the…

Mediator(中介者)--对象行为型模式

Mediator(中介者)–对象行为型模式 一、意图 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 二、动机 1.在软件构建过程中,经常…

[mybatis]Configuration XML_mappers

mappers 将sql映射注册到全局配置中 mapper 注册一个sql映射 resource:引用类路径下的sql映射文件url:引用网络路径或者磁盘路径下的sql映射文件class:引用(注册)接口 1.有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;…

Memento(备忘录)--对象行为型模式

Memento(备忘录)–对象行为型模式 一、意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保持这个状态。这样以后就可将该对象恢复到原先保存的状态。 二、动机 1.在软件构建过程中,某些对象的状态…

IBM、甲骨文、CNCF 就谷歌对 Istio 治理的处理提出抗议

近日来 Istio 商标转让、IBM 抗议谷歌违背承诺未将 Istio 捐献给 CNCF 的事情闹的沸沸扬扬。Google 宣布将 Istio 商标转让给 Open Usage Commons 组织IBM 声明对 Google 违背承诺未将 Istio 贡献给 CNCF 表示失望下面是据 TheRegister 的报道:谷歌创建了一个开放使…

Observer(观察者)--对象行为型模式

Observer(观察者)–对象行为型模式 一、意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有的依赖于它的对象都得到通知并被自动更新。 二、动机 1.在软件构建过程中,我们需要为某些对象建立一…

【今天下午活动】从 HelloWorld 到 AntDesign,Blazor 将 .NET 带到现代前端圈

Blazor 是一个 Web UI 框架,可通过 WebAssembly 在任意浏览器中运行 .Net 。Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程,它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术,但它使用 C#语言和 Razor 语法代替 JavaScrip…

[mybatis]sqlSessionFactory.openSession()

第一个是不会自动提交的 第二个带参数的是会自动提交的

State(状态)--对象行为型模式

State(状态)–对象行为型模式 一、意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 二、动机 1.在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只…

推荐一个Asp.Net Core工具库

Masuit.Tools开源地址https://github.com/XiLife-OSPC/Masuit.Tools包含一些常用的操作类,大都是静态类,加密解密,反射操作,硬件信息,字符串扩展方法,日期时间扩展操作,大文件拷贝,图…

Strategy(策略)--对象行为型模式

Strategy(策略)–对象行为型模式 一、意图 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 二、动机 1.在软件构建过程中,某些对象使用的算法可能多种多…

12个Visual Studio调试效率技巧

在这篇文章中,我们假定读者了解VS基本的调试知识,如:F5 开始使用调试器运行程序F9 在当前行设置断点F10 运行到下一个断点处F5 从被调试的已停止程序恢复执行F11 步进到函数内(如果当前程序指针指向一个函数)F10 步过函…

Template Method(模板方法)--类行为型模式

Template Method(模板方法)–类行为型模式 一、意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 二、动机 1.在软件构建过程中,对…