设计模式之命令模式(C++)

设计模式与XML(四)命令模式和遥控器模式(C++) 一、实验目的及要求 1、掌握行为型模式的概念。 2、掌握责任链模式、命令模式、解释器模式、迭代器模式、中介者模式的构造方式及使用情景。 二、实验设备(环境)    1、   软件需求: Dev-Cpp5.4, Rational Rose / Microsoft Visio 2、   硬件需求: Pentium III 450以上的CPU处理器,1G以上的内存,2G的自由硬盘空间   ... 阅读详情

1. 作用

命令模式,一个与命令有关的模式。将命令的执行者封装在命令中,命令调用者和接受者(执行者)进行了解耦。
意图:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

2. UML类图

这里写图片描述

参与者:

  • Command:声明执行操作的接口,核心为Execute接口。同时将一个接受者对象绑定于一个动作。
  • ConcreteCommand: 调用接受者相应的操作,以实现Execute。
  • Invoker:命令的调用者,要求该命令执行请求。
  • Receiver:知道如何实施与执行一个请求相关的操作。

3. 实现

举例:日常生活中,我们经常到饭店去吃饭,当然我们要吃什么会给服务员说,服务员在转告给厨师,点菜可以看做一个请求,看它如何用命令模式实现。

这里写图片描述

代码:


#include <iostream>
#include <string>

using namespace std;




//命令处理者:厨师

class Chef
{
public:
    void cook(string name)
    {
        cout << "厨师做一道" << name <<endl;
    }
};

//命令抽象类:点菜
class Command
{
public:
    Command(Chef *_chef) :m_pChef(_chef){}

    virtual void excute() = 0;
protected:
    Chef *m_pChef;
};

//命令具体类:牛肉
class BeefCmd :public Command
{
public:
    BeefCmd(Chef *_chef) :Command(_chef){}

    virtual void excute()
    {
        m_pChef->cook("青椒炒牛肉");
    }
};

//命令具体类:土豆
class PotatoCmd :public Command
{
public:
    PotatoCmd(Chef *_chef) :Command(_chef){}

    virtual void excute()
    {
        m_pChef->cook("青椒炒土豆丝");
    }
};


//命令具体类:牛肉
class EggSoupCmd : public Command
{
public:
    EggSoupCmd(Chef *_chef) :Command(_chef){}

    virtual void excute()
    {
        m_pChef->cook("西红柿蛋汤");
    }
};

//命令接受者:服务员
class Waiter
{
public:
    void ReciveCmd(Command *cmd)
    {
        m_Cmd = cmd;
    } 

    void dealCmd()
    {
        m_Cmd->excute();
    }
private:
    Command *m_Cmd;
};


//饭店场景
int main()
{
    //服务员
    Waiter *waiter = new Waiter;

    //厨师
    Chef *chef = new Chef;


    //客人开始点菜
    Command *beef = new BeefCmd(chef);
    Command *potato = new PotatoCmd(chef);
    Command *eggSoup = new EggSoupCmd(chef);

    //下单
    waiter->ReciveCmd(beef);
    waiter->dealCmd();

    waiter->ReciveCmd(potato);
    waiter->dealCmd();

    waiter->ReciveCmd(eggSoup);
    waiter->dealCmd();
    return 0;
}
结果:
厨师做一道青椒炒牛肉
厨师做一道青椒炒土豆丝
厨师做一道西红柿蛋汤
请按任意键继续. . .

4. 优缺点

优点:

  • 将调用操作的对象和实现操作的对象进行了解耦。
  • 具体命令扩展方便。

缺点:

  • 有几个具体命令就有多少具体类。

5. 适用场景

只要是你认为可以看做命令的地方都可以使用命令模式。

6. 总结

命令模式在实际软件设计中经常使用,想想接收者如果是队列,开一个线程从队列中取出命令来执行。这种用法比比皆是。

命令模式(C++实现) 命令行模式的C++实现 编译环境VS2010 命令模式解析:http://blog.youkuaiyun.com/zs634134578/article/details/21031509 立即下载

相关推荐

LangChain Agent Skills 实战指南:12个案例玩转智能体技能封装与编排

大语言模型应用开发中,智能体(Agent)的能力扩展正从零散的函数调用走向标准化封装。Agent Skills 将某项具体能力组织为带说明、代码与依赖的技能目录,让模型能自动发现和调度,其核心价值在于解决工具数量膨胀后的维护混乱与调用失控问题。与 Tool 的单一执行、MCP 的协议连接不同,Skill 更强调能力的语义描述与组合复用,配合 LangGraph 的状态编排和 LangSmith 的可观测性,可构建生产级智能体系统。在实际场景中,Agent Skills 可覆盖 RAG 知识库问答、多轮记忆保

weixin_34335458的博客 407

设计模式之命令模式

命令模式 概念 类图 代码实例 概念 将一个请求(命令)封装成一个对象,从而具有不同请求(命令)供客户度选择,对请求排队、记录以及支持可重做和撤销操作 好处: 1、能很容易设计一个命令队列 2、很容易记录每个命令的日志 3、可以实现命令重做和撤销 4、在不修改已有类情况下,很容易添加新命令类 5、将请求一个操作对象和具体执行该操作的对象分离开,也就是下面讲到的将客户和烧烤人分开之间通过Wait...

dynamo2120的博客 235

西门子S7-1200/1500 PLC编程与应用技巧

西门子S7-1200 PLC是一款紧凑型的控制器,适用于小型到中型的自动化控制任务。紧凑设计:集成了I/O模块,减少了控制柜的空间需求。高性能:高达25µs的扫描时间,能够快速响应。模块化扩展:支持扩展输入输出模块、通信模块和智能模块,满足不同的应用需求。多种编程语言:支持Ladder图(梯形图)、功能块图(FBD)、结构化文本(ST)等多种编程语言。西门子S7-1200与S7-1500 PLC是强大且灵活的工业控制系统,适用于各种自动化应用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2670

【C++设计模式之命令模式:行为型】分析及示例

命令模式是一种行为型设计模式,它将请求封装成一个对象,从而使不同的请求可以被参数化、队列化或记录化。这种模式允许请求的发送者和接收者进行解耦,同时提供更高的灵活性和可扩展性。

FreeLikeTheWind的博客 552

(一篇即成功)Ubuntu下搭建qt环境和安装Qt Creator

只需一篇就成功搭建Ubuntu下的QT环境 你还在等什么

m0_73450461的博客 1万+

宇树G1双足机器人SLAM开发环境搭建实战指南

SLAM(同步定位与建图)是机器人自主导航的核心技术。在双足人形机器人平台上,由于运动模型复杂、机身晃动带来高频IMU噪声,SLAM开发对环境配置和依赖管理提出了更高要求。以宇树G1为例,系统阐述如何通过Ubuntu 20.04、ROS Noetic与Docker容器化方案构建可复现的SLAM开发环境。先介绍依赖分层管理与版本锁定原理,再深入catkin工作空间编译、传感器驱动集成、网络与多机通信配置等工程实践,最后提供常见问题排查与避坑指南。这套方法论不仅适用于G1,也可迁移至其他双足或轮式机器人平台,帮

weixin_32025789的博客 265

C++命令模式

简述 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传递给调用对象。调用对象寻找可以处理该命令的合适对象,并把该命令传给相应的对象,该对象执行命令。 简述 背景 模式结构 代码实现 简易计算器 命令队列 兴趣点 版权所有:一去丶二三里,转...

weixin_33737134的博客 391

FPGA优质开源项目 – UDP万兆光纤以太网通信

本文开源一个FPGA项目:UDP万兆光通信。文章末尾有该工程源码获取方式,有需要的小伙伴可以点赞、分享支持一下~

cjx_csdn的博客 4766

我所理解的设计模式(C++实现)——命令模式(Command Pattern)

概述: 我们去餐厅吃饭,我们是通过服务员来点菜,具体是谁来做这些菜和他们什么时候完成的这些菜,其实我们都不知道。抽象之,“菜单请求者”我们和“菜单实现者”厨师,2者之间是松耦合的,我们对这些菜的其他一些请求比如“撤销,重做”等,我们也不知道是谁在做。其实这就是本文要说的Command模式。 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请...

runfeel 673

IAR9.4报错之编码方式

IAR9.40编码方式错误导致的报错

qq_36081075的博客 2626

智能车图像处理20-进阶篇12--正入十字补线1

这篇文章主要讲述基本的正入十字补线方法。

taiyuezyh的博客 6932

设计模式之命令模式(C++)

介绍设计模式之命令模式

翟天保的博客 2万+

2026年算法工程师常见面试简答题

本文摘要:文章系统梳理了机器学习与深度学习中的30个核心概念,涵盖模型优化、评估指标、经典算法和大模型应用等关键知识点。主要内容包括:1)过拟合与欠拟合的成因及解决方法;2)偏差-方差权衡原理;3)数据划分与交叉验证策略;4)分类/回归任务评估指标选择;5)逻辑回归、决策树、SVM等传统算法解析;6)梯度下降优化与正则化技术;7)CNN、RNN、Transformer架构对比;8)Embedding表示与RAG技术。特别强调面试高频考点如XGBoost改进、注意力机制原理等,并给出实际工程中的解决方案建议,

不务正业的猿 349

设计模式之命令模式实例(c++)

命令模式 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。它包含请求的发送者、接收者、命令三个部分。 命令模式实例之电视机遥控器 从类图可知,Controller类(发送者)聚合多个命令类,然后通过抽象多态的方式,调用execute来调用具体命令类,从而实现对命令类关联的Television(接收者)的不同控制。 ...

Sincky的博客 772

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

设计模式——命令模式(C++)

设计模式——命令模式(C++)

hujingshuang 1207

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

设计模式(C++)详解——命令模式(2)

命令模式是一种行为设计模式,它将请求封装为独立的对象,使请求的发送者和接收者解耦。文章通过生动的比喻和代码示例,展示了命令模式如何实现撤销/重做功能。核心思想是将操作封装为命令对象,记录操作历史,从而支持撤销和重做。文中以文本编辑器为例,详细演示了如何通过命令模式实现插入、删除文字的撤销操作,并解释了模式中的五个关键角色:命令接口、具体命令、客户端、调用者和接收者。命令模式特别适用于需要实现撤销、事务或宏命令的场景。

weixin_42108533的博客 880

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

设计模式(C++)详解——命令模式(1)

命令模式是一种行为设计模式,它将请求封装为对象,从而解耦请求发送者和接收者。该模式包含四个核心角色:Command(命令接口)、ConcreteCommand(具体命令)、Invoker(调用者)和Receiver(接收者)。主要优势包括支持撤销/重做功能、降低系统耦合度以及易于扩展新命令,但会增加类的数量和设计复杂度。典型应用场景包括文本编辑器的撤销系统、GUI操作和事务处理等,通过将操作封装为命令对象,可以灵活地实现操作队列、日志记录和撤销机制。

weixin_42108533的博客 441

设计模式之命令模式(c++)

命令模式的作用是将函数转换为对象,将实际的操作与并行的框架分离,命令模式属于 代码来源于c++编程思想 class Task { public: virtual void operation() = 0; }; class TaskRunner { //singleton pattern static vector tasks; TaskRun

有志青年 423

设计模式--命令模式(C++)

命令模式就是外界把命令告诉中间枢纽,然后由中间枢纽根据命令的不同,指派给相应的部门去完成;就像客户把要求告诉产品经理,然后产品经理根据客户不同的命令,把这些命令分给需求组、美工组、研发组去完成;客户直接与客户经理对接,而不与需求组、美工组、研发组直接对接; 1.部门基类 #pragma once class Group { public: Group(); virtual ~Group(); virtual void AddAction() = 0; virtual void ChangeAc

sang_12345的博客 589

设计模式(C++)-行为型模式-命令模式

命令模式是一种行为型设计模式,它将请求封装为对象,实现请求发送者与接收者的解耦。文章以游戏服务器处理四种请求为例,展示了C++实现方式:定义抽象命令接口,创建具体命令类(如AddMoneyCommand),使用Server类管理命令队列并执行。该模式优点包括解耦调用者/接收者、支持撤销/重做、易于扩展等,但会增加类数量和系统复杂度。通过命令对象封装请求,实现了请求的灵活管理和执行控制,适用于需要参数化、队列化或日志记录请求的场景。

oqqKuKu12的博客 362

23种设计模式之(十四)命令模式(python_c++实现)

23种设计模式之(十四)命令模式(Command) 本文主要介绍23种设计模式之命令模式,附详细python/c++示例代码。 - 概念 - 应用场景 - 注意事项 - 代码示例 - 总结 - 代码链接 命令模式(Command) 概念 命令模式是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适...

zzl_python的博客 414

命令模式(C++)

命令模式将发送者与接收者解耦,如开关1 --- 电灯,开关2---电脑,开关3---其他电器,它将一个请求封装成一个对象,可以让你用不同的请求对客户进行参数化。 命令模式包含四种角色: 1.Command(抽象命令类) 2.ConcreteCommand(具体命令类) 3.Invoker(调用者) 4.Receiver(接收者) C++代码如下 #include &lt;...

Mr Lin 的专栏 264

命令模式(C++)

#include <iostream> using namespace std; class action { public: action(){} ~action(){} void forward(){cout<<"forward"<<endl;} void backward(){cout<<...

weixin_34067049的博客 924
上一篇: 设计模式之责任链模式(C++)
下一篇: 动态库的依赖关系
ShaYX1991
博客等级 码龄11年 149粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值