命令模式 Command「建议收藏」

命令模式 Command「建议收藏」命令模式 Command动机模式定义实例结构要点总结笔记动机在软件构建过程中,“行为请求者”与”行为实现者”通常呈现一种”紧耦合”,但在某些场合—-比如需要对行为进行记录,撤销/重(Undo / Redo),事务”等处理,这种无法抵御变化的紧耦合是不合适的在这种情况下,如何将”行为请求者”和”行为实现这”解耦?将一组行为抽象为对象,可以实现两者之间的松耦合模式定义将一个请求(行为)封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作实例#i

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

动机

在软件构建过程中,“行为请求者”与”行为实现者”通常呈现一种”紧耦合”,但在某些场合—-比如需要对行为进行记录,撤销/重(Undo / Redo),事务”等处理,这种无法抵御变化的紧耦合是不合适的

在这种情况下,如何将”行为请求者”和”行为实现这”解耦?将一组行为抽象为对象,可以实现两者之间的松耦合

模式定义

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

实例

#include<vector>
#include<string>
using namespace std;
class Command{ 
   
public:
    virtual void execute() = 0;
}

class ConcreteCommand1 : public Command{ 
   
    string arg;
public:
    ConcreteCommand1(const string &a) : arg(a){ 
   }
    void execute()override{ 
   
        cout<<"#1 process....."<<arg<<endl;
    }
}

class ConcreteCommand2 : public Command{ 
   
    string arg;
public:
    ConcreteCommand1(const string &a) : arg(a){ 
   }
    void execute()override{ 
   
        cout<<"#1 process....."<<arg<<endl;
    }
}

结构

在这里插入图片描述

要点总结

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

笔记

  • 把行为封装成对象
  • 行为一般指的是代码
  • 代码和对象之间的绑定是紧密的 天然强耦合的
  • 一旦变成对象就有很高的灵活度 可以序列化 可以当参数等等
  • Command是行为对象
  • ConcreteCommand是对象 但是其表征的是行为
  • copy delete undo等等都可以看成一个个命令
  • 有了模板的话 函数式对象作用比较大
  • Command模式很多情况下都被函数对象代替
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168497.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • webpack css_web引入css文件

    webpack css_web引入css文件css文件处理-准备工作(以下项目配置都是基于上一篇webpack(4)的基础上)在项目开发中,我们必然需要添加很多的样式,而样式我们往往写到一个单独的文件中。这里我们就在src目录中创建一个n

  • pycharm添加不了解释器_pycharm解释器为空

    pycharm添加不了解释器_pycharm解释器为空直接去项目文件下.idea/workspace.xml修改源文件即可。

  • 成功解决Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2「建议收藏」

    成功解决Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2「建议收藏」解决问题在导入tensorflow后,进行运算时,出现了红色错误!importtensorflowastfimportnumpyasnp资料参考AdvancedVectorExtensions(AVX,alsoknownasSandyBridgeNewExtensions)先进的矢量扩展(AVX,也称为桑迪桥新的扩展)是从英特尔和英特…

  • DOS命令copy con的用

    DOS命令copy con的用copy是复制命令con 是dos 设备文件的简称。 在dos中把很多外部设备作为文件,称为设备文件。dos中这样规定的:con 控制台(键盘/显示器) aux (或com1)第一个串口 lpt1 第一个并行打印机接口,nul 不存在的设备 所以,举例说明: copy con abc

  • 费曼学习法

    费曼学习法费曼学习法我的理解:费曼学习法就是把学好的东西用简洁易懂的语言,传授给别人举例:你学完微积分,然后自己去培训班,自己做老师,传授给学生们,并且学生们都能听懂费曼学习法的四个步骤:1.确定目标

  • 为何你会被强插广告/盗号?谈HTTPS连接的那些事

    为何你会被强插广告/盗号?谈HTTPS连接的那些事相信很多朋友都遇到过网页被强插广告的情况,好端端一个干净的页面,动不动就被插了个屠龙宝刀点击就送的小窗口,看着就心烦。这种网页劫持强插广告的现象,在中国非常常见,往往是运营商进行HTTP劫持所造成的。对付这种劫持,一个很好的解决办法就是HTTPS。网页劫持很多人都有遇到过,HTTPS可以比较好地防范这问题HTTPS能够加密网页传输内容,不仅可以防…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号