命令模式 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模式很多情况下都被函数对象代替
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java前端好学还是后端好学,一篇文章帮你解答

    java前端好学还是后端好学,一篇文章帮你解答蚂蚁金服一面:下午杭州的电话,问有没有空,果断有空,虽然感觉略显紧张,有点懵逼。面试的题目:HashMap和Hashtable的区别实现一个保证迭代顺序的HashMap说一说排序算法,稳定性,复杂度说一说GC可以保证的实习时长职业规划整体来说,一面的基础性问题比较多,所以博主基本都答出来了,准备过还是有些用处的。所以一面完了感觉还不错,接着第二天下午就二面了。蚂蚁金服二面二面是我最慌的面试,因为二面是最关键的,是最大的主管面试,所以非常关键,整体来说,二面的节奏非常快,和一面完全

    2022年7月9日
    16
  • 按钮式超链接代码

    按钮式超链接代码简单的制作按钮式超链接效果代码,视觉上产生按钮图样

    2022年7月26日
    4
  • 解决“The method XXXXXX of type XXXXXXXXX must override a superclass method”

    解决“The method XXXXXX of type XXXXXXXXX must override a superclass method”我的Eclipse版本是3.6.1 @Override时出现以下错误:  ThemethodXXXXXX oftypeXXXXXXXXXmust overrideasuperclassmethod  上网搜索原来原因是:实现类里面使用了@Override,那么在JDK1.5下要使用@Override

    2022年8月22日
    5
  • NR 5G 网络切片[通俗易懂]

    NR 5G 网络切片[通俗易懂]5G网络切片网络切片是在5G引入的新概念之一,关于网络切片首先从5G的前辈3G和4G说起,从3G时代开始,手机上网就靠数据业务流量,但网络资源有限,不可能保证所有业务都能全速进行,总得捡重要的首先保障。最简单的方式就是对业务进行分类,给予不同优先级的业务不同的资源,不同的服务质量,这就是QoS(QualityofService)的来源。3G网络,是无线互联网的开端,通过对所有用户的各种类型…

    2022年9月1日
    6
  • 基于Proxy思想的Android插件框架

    基于Proxy思想的Android插件框架

    2022年1月27日
    51
  • 手把手教你写专利申请书/如何申请专利

    手把手教你写专利申请书/如何申请专利手把手教你写专利申请书·如何申请专利 摘要小前言(一)申请前的准备工作   1、申请前查询   2、其他方面的考虑   3、申请文件准备(二)填写专利申请系列文档   1、实际操作步骤   2、具体操作   3、经验分享、注意事项(三)关于费用(四)其他的话参考资源提示常见问题的问与答 摘要:   如何写好专利申请?由于很多专利申请人都…

    2022年6月11日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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