命令模式 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)
上一篇 2022年8月8日 上午10:16
下一篇 2022年8月8日 上午10:36


相关推荐

发表回复

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

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