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

article/2025/10/20 14:36:50

目录

 

 

基本概念

代码与实例


 

基本概念

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

命令模式的作用:

          1. 能比较容易的设计一个命令队列;

          2. 在需要的情况下,可以比较容易地将命令记入日志;

          3. 允许接收请求的一方决定是否要否决请求;

          4. 可以容易的实现对请求的撤销和重做;

          5. 由于加进的新的具体命令类不影响其他类,因此增加新的具体命令类很容易。

 

UML图如下(此图来源于大话设计模式)

 

代码与实例

程序运行截图如下:

源码如下:

Head.h

#ifndef HEAD_H
#define HEAD_H#include <iostream>
#include <string>
using namespace std;//Receiver类,知道如何实施与执行一个与请求相关的操作,任何类都可能作文一个接收者
class Receiver{public:void action();~Receiver();
};//Command类,用来声明执行操作的接口
class Command{public:virtual void execute();Command(Receiver *receiver);virtual ~Command();protected:Command();Command(Command &c);Command &operator = (Command &c);Receiver *m_receiver;
};//ConcreteCommand类,将一个接收者对象绑定于一个动作,调用接收这相应的操作,以实现Execute
class ConcreteCommand: public Command{public:ConcreteCommand(Receiver *receiver);void execute();~ConcreteCommand();
};//Invoker类,要求该命令执行这个请求
class Invoker{public:void setCommand(Command *command);void executeCommand();private:Command *m_command;
};#endif

Head.cpp

#include "Head.h"void Command::execute()
{}Command::~Command()
{cout << "Command::~Command()" << endl;
}Command::Command()
{}Command::Command(Command &c)
{}Command::Command(Receiver *receiver)
{m_receiver = receiver;
}Command & Command::operator=(Command &c)
{return Command();
}void Receiver::action()
{cout << "执行请求!" << endl;
}Receiver::~Receiver()
{cout << "Receiver::~Receiver()" << endl;
}ConcreteCommand::ConcreteCommand(Receiver *receiver) : Command(receiver)
{}void ConcreteCommand::execute()
{m_receiver->action();
}ConcreteCommand::~ConcreteCommand()
{cout << "ConcreteCommand::~ConcreteCommand()" << endl;
}void Invoker::setCommand(Command *command)
{m_command = command;
}void Invoker::executeCommand()
{m_command->execute();
}

main.cpp

#include "Head.h"int main(int *argc, int *argv){Receiver *r = new Receiver;Command *c = new ConcreteCommand(r);Invoker *i = new Invoker;i->setCommand(c);i->executeCommand();delete r;delete c;delete i;getchar();return 0;
}

 


http://chatgpt.dhexx.cn/article/4j9mRSac.shtml

相关文章

设计模式---命令模式

命令模式 命令模式的定义 ​ 命令模式是一个高内聚的模式&#xff0c;其定义为&#xff1a;Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.&#xff08;将一…

【设计模式】命令模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

文章目录 一、命令模式简介二、命令模式 适用场景三、命令模式 优缺点四、命令模式 与 备忘录模式五、命令模式 代码示例1、命令接口2、发布命令类3、关闭命令类4、游戏类5、命令执行者类6、测试类 一、命令模式简介 命令模式 : 将 不同的请求 封装成 不同的请求对象 , 以便 使…

设计模式(16)命令模式

**定义&#xff1a;**将一个请求封装成一个对象&#xff0c;从而让你使用不同的请求把客户端参数化&#xff0c;对请求排队或者记录请求日志&#xff0c;可以提供命令的撤销和恢复功能。 **类型&#xff1a;**行为类模式 类图&#xff1a; 命令模式的结构 ​ 顾名思义&#…

什么是命令模式?

一、命令模式的定义 命令是对命令的封装&#xff0c;每一个命令都是一个操作&#xff0c;请求方发出请求&#xff0c;接收方接收请求&#xff0c;并执行操作。命令模式解耦了请求方和接收方&#xff0c;命令模式属于行为型模式 二、命令模式的uml图和通用写法 uml 通用写法 …

设计模式之命令模式详解

1 概述 日常生活中&#xff0c;我们出去吃饭都会遇到下面的场景。我们可以将女招待理解成一个请求的发送者&#xff0c;用户通过它来发送一个“点餐”请求&#xff0c;而厨师是“点餐”请求的最终接收者和处理者&#xff0c;在图中&#xff0c;顾客和厨师之间并不存在直接耦合…

命令模式

一、命令模式介绍 在软件设计中&#xff0c;我们经常需要向某些对象发送请求&#xff0c;但是并不知道请求的接收者是谁&#xff0c;也不知道被请求的操作是哪个。我们只需要在程序运行时指定具体的请求接收者即可&#xff0c;此时可以使用命令模式来设计。 命令模式使得请求发…

Java设计模式——命令模式

文章目录 命令模式 命令模式 命令模式很好理解&#xff0c;举个例子&#xff0c;司令员下令让士兵去干件事情&#xff0c;从整个事情的角度来考虑&#xff0c;司令员的作用是&#xff0c;发出口令&#xff0c;口令经过传递&#xff0c;传到了士兵耳朵里&#xff0c;士兵去执行…

如何设置IPv4和IPv6报文的DSCP值——网络测试仪实操

一、操作说明 在QoS测试中&#xff0c;经常要设置不同优先级的报文&#xff0c;来验证被测设备对于优先级的调度。所以&#xff0c;我们就要了解如何设置IPv6和IPv6报文中的DSCP&#xff08;大部分使用DSCP值&#xff0c;也会用到TOS值&#xff09; 这里我们使用测试接交换机&…

DSCP vs IPv4 Tos

首先看IPv4包头如下 其中&#xff0c;Qos用到的是Tos定义有下面两种&#xff1a; 老的IPv4 TOS Byte定义和值 新的DSCP定义和值 DSCP值 DSCP ValueMeaningDrop ProbabilityEquivalent IP Precedence Value101 110 (46)High Priority Expedited Forwarding (EF)N/A101 – …

c语言socket设置IPV4/6的dscp值

环境&#xff1a;linux centos7 、x86 、UDP包 使用sock需要增加头文件 #include <sys/socket.h> #include <sys/types.h> 设置方法很简单&#xff0c;都是使用setsockopt函数&#xff0c;就是找资料及如何太麻烦&#xff0c;尤其是IPV6。需要注意IPV4设置的是I…

tos cos dscp 区别和作用

tos cos 和dscp 都是通过iptable 的mange 的mark 标签来更改的。 谈到qos首先需要了解qos调度的几个重要过程,qos调度过程包括网络入口数据流量的分类和标记、骨干网设备上的拥塞避免和拥塞管理、网路出口的队列调度这几个重要过程. 1、cos和tos的区别: 通过acl对流量进行分类以…

IP优先级和DSCP之间的关系

1. IP优先级和DSCP之间的关系 DiffServ体系定义的DS字段&#xff0c;取代IPv4中ToS字段作出有关数据包分类和流量调节功能的策略。 1.1. ToS字段 在IPv4的报文头中&#xff0c;TOS字段是1字节&#xff0c;根据RFC1122的定义&#xff0c;IP优先级&#xff08;IPPrecedence&…

802.1P优先级、IP优先级、TOS优先级及DSCP优先级的分类和对应

1、802.1P优先级&#xff08;有时也称COS优先级&#xff09;&#xff1a; 802.1p用户优先级定义在二层802.1Q 标签头中的TCI字段中。&#xff0c;和VLAN ID一起使用&#xff0c;位于高位起16-18bit字段&#xff0c;长度3bit&#xff0c;取值范围0-7&#xff0c;0优先级最低&…

DSCP 与IP 优先级IP优先级

首先看IPv4包头如下 其中&#xff0c;Qos用到的是Tos定义有下面两种&#xff1a; 老的IPv4 TOS Byte定义和值 新的DSCP定义和值 DSCP值 DSCP Value Meaning Drop Probability Equivalent IP Precedence Value 101 110 (46) High Priority Expedited Forwarding (EF) N/A…

IP Precedence、DSCP、TOS

刚开始接触QoS时&#xff0c;经常会被IP Precedence、DSCP、TOS这些名词搞迷糊&#xff0c;那么接下来就梳理一下。 首先 IP Precedence IPv4中有8bit作为TOS字段&#xff0c;一开始RFC791定义了TOS前三位为IP Precedence&#xff0c;划分了8个优先级&#xff0c;可用于流分类…

【网络】Cos和ToS和DSCP|Qos|PHB的含义和区别以及映射

目录 视频教程&#xff1a; 介绍和区别 Qos/Cos IP-TOS&#xff08;IPP/CS&#xff09;和DSCP PHB&#xff08;Per-Hop-Behaviors&#xff09; 区别 各个等级的DSCP值和含义(PHB) 映射 COS到DSCP的映射 IP-Precedence到DSCP的映射&#xff08;Tos-->DSCP&#xff09…

TOS 和DSCP

IPv4报文中有三种承载QoS优先级标签的方式&#xff0c;分别为基于二层的CoS字段&#xff08;IEEE802.1p&#xff09;的优先级、基于IP层的IP优先级&#xff08;IP Precedence&#xff09;字段ToS优先级和基于IP层的DSCP&#xff08;Differentiated Services Codepoint&#xff…

什么是DSCP,如何使用DSCP标记搭配ROS策略

什么是DSCP&#xff0c;如何使用DSCP标记搭配ROS策略 一、什么是DSCP DSCP&#xff1a;差分服务代码点&#xff08;Differentiated Services Code Point&#xff09;&#xff0c;IETF于1998年12月发布了Diff-Serv&#xff08;Differentiated Service&#xff09;的QoS分类标准…

TOS 和 DSCP理解

背景 IPv4报文中有三种承载QoS优先级标签的方式&#xff0c;分别为基于二层的CoS字段&#xff08;IEEE802.1p&#xff09;的优先级、基于IP层的IP优先级&#xff08;IP Precedence&#xff09;字段ToS优先级和基于IP层的DSCP&#xff08;Differentiated Services Codepoint&am…

谈谈ES5和ES6的区别

我们都知道JavaScript是由三部分组成&#xff1a; 1. ECMAScript(核心)&#xff1a;规定了语言的组成部分>语法、类型、语句、关键字、保留字、操作符、对象 2. BOM(浏览器对象模型): 支持访问和操作浏览器窗口&#xff0c;可以控制浏览器显示页面以外的部分。 3. DOM(文…