当前位置: 首页 > news >正文

行为模式---命令模式

概念

命令模式是一种行为设计模式,它的核心思想就是将请求封装为一个对象,此对象包含与请求相关的所有信息。可以用不同的请求对客户进行参数化。命令模式通过将请求的发送者和接收者解耦,支持请求的排队、记录、撤销等操作。

使用场景

1、如果需要通过参数来操作对象,可以使用命令模式。

2、如果想要把操作放入到对象中进行操作执行或者远程执行操作就需要命令模式。

3、如果想要实现操作回滚操作,就需要用到命令模式。

实现方式

1、使用命令模式需要至少创建三个类,一个命令的接口类,一个是命令的调用类,一个实际接受者对象(简单命令可以没有);

2、创建一个仅有一个执行方法的命令接口。通过继承命令接口创建一系列不同的具体命令类,具体命令类中实现方法。每个具体的命令类必须保存请求参数和实际接受者对象的引用。所有的变量只能在构造函数中进行初始化。

3、创建命令的调用类,也是发送命令的类,在这些类中添加保存命令的成员变量,发生者只能通过命令接口与其命令进行交互,发送者本身不创建对象,命名对象是通过参数设置到调用类的。

4、客户端的初始化。
​ 1)创建接受者
​ 2)创建命令,有需要的话可以关联接受者对象。
​ 3)创建发送者,需要将命令进行关联(也就是将命令设置到发送者)。

类结构图

在这里插入图片描述

示例代码

#include "MingLingMoShi.h"int main()
{std::cout << "欢迎东哥来到设计模式的世界!\n";//创建命令对象CommandBase* command = new ConcreteCommend();CommandBase* command1 = new ConcreteCommend1();//创建调用者Invoker invoker;invoker.setCommend(command);invoker.execte();invoker.setCommend(command1);invoker.execte();
}
#pragma once
#include <iostream>
using namespace std;//接受者类
class Receiver {
public:Receiver() {}~Receiver() {}void execte() {cout << "Receiver 接收者对象执行操作函数" << endl;}
};//命令基类
class CommandBase
{
public:CommandBase() {}~CommandBase() {}virtual bool execte() = 0;
};//具体命令,不使用接受者
class ConcreteCommend : public CommandBase {
public:ConcreteCommend() {}~ConcreteCommend() {}bool execte() {cout << "ConcreteCommend 没有使用接受者的命令对象" << endl;return true;}
};//具体命令,使用接受者
class ConcreteCommend1 : public CommandBase {
public:ConcreteCommend1() {}~ConcreteCommend1() {}bool execte() {cout << "ConcreteCommend1 使用接受者的命令对象" << endl;m_receiver = new Receiver();m_receiver->execte();return true;}
private:Receiver* m_receiver;
};//调用者
class Invoker {
public:Invoker() {}~Invoker() {}void setCommend(CommandBase * command) {m_command = command;}void execte() {m_command->execte();}
private:CommandBase* m_command;};

相关文章:

行为模式---命令模式

概念 命令模式是一种行为设计模式&#xff0c;它的核心思想就是将请求封装为一个对象&#xff0c;此对象包含与请求相关的所有信息。可以用不同的请求对客户进行参数化。命令模式通过将请求的发送者和接收者解耦&#xff0c;支持请求的排队、记录、撤销等操作。 使用场景 1、…...

zabbix配置邮件告警

目录 实现步骤&#xff1a; 实现目的&#xff1a; 1.在监控端操作&#xff1a; 2.web界面部署 ​​​​​​​实现步骤&#xff1a; 1、在 zabbix服务端配置邮件发送脚本和修改 zabbix服务端配置文件; 2、在 zabbix前端控制台进行相关设置。 实现目的&#xff1a; Zab…...

INI和CSV文件保存

INI文件 INI文件是一种配置文件格式&#xff0c;通常用于Windows操作系统中的应用程序中。 它是一种文本文件&#xff0c;由多个节和键值对组成&#xff0c;用于存储应用程序的配置信息。 INI文件的特点包括&#xff1a; INI文件是一种文本文件&#xff0c;易于编辑和阅读。…...

汽车智能钥匙中PKE低频天线的作用

PKE&#xff08;Passive Keyless Entry&#xff09;即被动式无钥匙进入系统&#xff0c;汽车智能钥匙中PKE低频天线在现代汽车的智能功能和安全保障方面发挥着关键作用&#xff0c;以下是其具体作用&#xff1a; 信号交互与身份认证 低频信号接收&#xff1a;当车主靠近车辆时…...

计算机等级考试

一、计算机等级考试——题库 &#xff08;1&#xff09;选择题 &#xff08;2&#xff09;基本操作题 &#xff08;3&#xff09;上网题 &#xff08;4&#xff09;文字题 &#xff08;5&#xff09;表格题 &#xff08;6&#xff09;演示文稿题 二、计算机等级考试——标准评…...

Geotools中获取Shapefile的属性表格字符集编码的一种方法

目录 前言 1、字符集编码的重要性 2、Geotools 在 GIS 开发中的地位 一、GeoTools的字符集知识 1、字符集的作用 2、shapefile中字符集信息 二、GeoTools中获取字符集的方法 1、默认获取 2、从DataStore中获取 3、从CPG文件中获取 4、生产字符获取实践 三、总结 前言…...

HTTP 与 HTTPS 协议:从基础到安全强化

引言 互联网的消息是如何传递的&#xff1f; 是在路由器上不断进行跳转 IP的目的是在寻址 HTTP 协议&#xff1a;互联网的基石 定义 HTTP&#xff08;英文&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;&#xff0c;即超文本传输协…...

Scrapy爬虫框架介绍

目录 什么是Scrapy Scrapy核心组件 Scrapy扩展组件 组件交互流程 安装Scrapy Scrapy项目目录结构说明 创建Scrapy项目 创建爬虫 运行爬虫 配置请求头 全局配置请求头 指定爬虫配置请求头 配置管道pipeline 全局配置pipeline 方式一&#xff1a;指定爬虫配置pipe…...

Stable Diffusion模型高清算法模型类详解

Stable Diffusion模型高清算法模型类详细对比表 模型名称核心原理适用场景参数建议显存消耗细节增强度优缺点4x-UltraSharp残差密集块(RDB)结构优化纹理生成真实人像/建筑摄影重绘幅度0.3-0.4&#xff0c;分块尺寸768px★★★★★☆皮肤纹理细腻&#xff0c;但高对比场景易出现…...

软考网络安全口诀

首先&#xff0c;我们来看第一个口诀 “防御为先&#xff0c;安全无小事”。这个口诀强调了网络安全中的防御意识。在软考备考过程中&#xff0c;我们需要深刻理解网络安全不仅仅是技术层面的问题&#xff0c;更是一种全面的防御思维。从网络架构设计到日常运维管理&#xff0…...

Baklib内容中台赋能企业智管

内容中台构建全场景智管 现代企业数字化运营中&#xff0c;全域内容管理能力已成为核心竞争力。通过智能知识引擎驱动的内容中台架构&#xff0c;企业能够实现跨部门、多形态数据的统一归集与动态调度。以某制造企业为例&#xff0c;其利用中台系统将分散在CRM、ERP及内部文档…...

vscode+vue前端开发环境配置

目录 一、安装Vue二、使用vue新建项目 一、安装Vue 在node.js安装好之后&#xff0c; npm config set registry https://registry.npmmirror.com# 安装vue相关工具&#xff0c;webpack用来项目构建、打包、资源整合等。 npm install webpack -g# 安装vue-cli脚手架 npm insta…...

Python项目-基于深度学习的校园人脸识别考勤系统

引言 随着人工智能技术的快速发展&#xff0c;深度学习在计算机视觉领域的应用日益广泛。人脸识别作为其中的一个重要分支&#xff0c;已经在安防、金融、教育等多个领域展现出巨大的应用价值。本文将详细介绍如何使用Python和深度学习技术构建一个校园人脸识别考勤系统&#…...

浅谈C++函数特性

C的函数特性 前言 在C中&#xff0c;函数加入了许多特性&#xff0c;例如&#xff1a;a、函数缺省参数 b、函数重载 c、内联函数 等等……&#xff0c;这里我会和大家详细去探讨这些特性。以及探讨这些特性的一些细节&#xff0c;同时在内联部分&#xff0c;我们还会把C语言的…...

Python----数据分析(Matplotlib三:绘图二:箱图,散点图,饼图,热力图,3D图)

一、箱图 箱图&#xff08;Box Plot&#xff09;&#xff0c;又称为箱形图、箱线图、盒式图、盒状图或盒须图&#xff0c;是一种用于展示数据分布情况的统计图表 箱图通过显示数据的中位数、上下四分位数&#xff08;Q1和Q3&#xff09;、异常值和数据的分布范围&#xff0c;提…...

高性能PHP框架webman爬虫引擎插件,如何爬取数据

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

【2025年后端开发终极指南:云原生、AI融合与性能优化实战】

一、2025年后端开发的五大核心趋势 1. 云原生架构的全面普及 云原生&#xff08;Cloud Native&#xff09;已经成为企业级应用的核心底座。通过容器化技术&#xff08;DockerKubernetes&#xff09;和微服务架构&#xff0c;开发者能够实现应用的快速部署、弹性伸缩和故障自愈…...

健康养生:开启活力人生的钥匙

在这个瞬息万变的时代&#xff0c;人们愈发珍视健康。健康养生&#xff0c;宛如一把神奇的钥匙&#xff0c;为我们打开通往活力人生的大门&#xff0c;全方位呵护身心&#xff0c;提升生活品质。 从饮食层面看&#xff0c;均衡膳食是核心。每餐力求包含碳水化合物、蛋白质、脂…...

vue2+ele-ui实践

前言&#xff1a;真理先于实践&#xff0c;实践发现真理&#xff0c;再实践检验真理 环境&#xff1a;vue2 & element-ui 正片&#xff1a; Select 选择器 简称 下拉框 下拉框完整的使用循环 下拉框 → 点击下拉框 → 展示数据 → 选择数据 → 下拉框显示数据 核心具有…...

三维重建(十五)——多尺度(coarse-to-fine)

文章目录 一、多尺度与图像金字塔:从全局结构到局部细节二、特征提取与匹配2.1 从数据采集的角度2.2 从数据增强的角度2.3 从特征提取的方式三、以多尺度的方式使用特征3.1 特征提取与匹配3.1.1 多尺度特征检测3.1.2 金字塔匹配3.2 深度估计与立体匹配3.2.1 多尺度立体匹配3.2…...

Bolts-ObjC终极迁移指南:从1.8.x到1.9.1的平滑升级方案

Bolts-ObjC终极迁移指南&#xff1a;从1.8.x到1.9.1的平滑升级方案 【免费下载链接】Bolts-ObjC Bolts is a collection of low-level libraries designed to make developing mobile apps easier. 项目地址: https://gitcode.com/gh_mirrors/bo/Bolts-ObjC Bolts-ObjC是…...

Pixel Dream Workshop 助力前端开发:Vue.js 项目动态视觉素材生成指南

Pixel Dream Workshop 助力前端开发&#xff1a;Vue.js 项目动态视觉素材生成指南 1. 为什么前端开发者需要关注视觉素材生成 作为一名Vue.js开发者&#xff0c;你可能经常遇到这样的困扰&#xff1a;产品经理突然要求给新功能加个炫酷的Banner图&#xff0c;设计师资源紧张排…...

动漫IP商业化新路径:AnythingtoRealCharacters2511助力二次元角色真人化营销落地

动漫IP商业化新路径&#xff1a;AnythingtoRealCharacters2511助力二次元角色真人化营销落地 1. 动漫角色真人化的商业价值 动漫IP的商业化一直是内容产业的重要课题。传统的周边商品、联名合作虽然有效&#xff0c;但缺乏突破性创新。随着AI技术的发展&#xff0c;动漫角色真…...

科研党效率翻倍:Texmaker这些隐藏功能让你的论文排版快人一步

Texmaker科研效率革命&#xff1a;解锁高阶玩家的12个生产力加速器 在深夜实验室的灯光下&#xff0c;你盯着屏幕上纠缠不清的LaTeX代码&#xff0c;参考文献格式突然崩溃&#xff0c;数学公式编号混乱不堪——这场景是否似曾相识&#xff1f;Texmaker作为LaTeX编辑器的隐藏冠军…...

HUNYUAN-MT赋能Agent智能体:构建具备多语言交互能力的AI助手

HUNYUAN-MT赋能Agent智能体&#xff1a;构建具备多语言交互能力的AI助手 想象一下&#xff0c;你正在开发一个面向全球用户的智能客服助手。一位法国用户用法语咨询产品问题&#xff0c;一位日本用户用日语询问订单状态&#xff0c;而你的核心业务逻辑和知识库大部分是中文的。…...

Android开发者必看:知乎Matisse图片选择器实战教程(附Glide/Picasso配置对比)

Android图片选择器深度实战&#xff1a;Matisse与Glide/Picasso的终极配置指南 每次看到微信那个丝滑的图片选择界面&#xff0c;你是不是也想过在自己的App里实现类似效果&#xff1f;作为知乎开源的明星项目&#xff0c;Matisse确实能帮你快速搭建专业级图片选择功能。但真正…...

从一道CTF赛题出发:手把手教你用火眼取证分析手机APP数据(附雷电模拟器实战)

从一道CTF赛题出发&#xff1a;手把手教你用火眼取证分析手机APP数据&#xff08;附雷电模拟器实战&#xff09; 在网络安全竞赛和电子数据取证领域&#xff0c;手机取证一直是技术含量高且实用性强的核心技能。本文将从一个真实的CTF赛题切入&#xff0c;带您完整走通手机镜像…...

pkNX:定制宝可梦游戏体验的全能编辑工具指南

pkNX&#xff1a;定制宝可梦游戏体验的全能编辑工具指南 【免费下载链接】pkNX Pokmon (Nintendo Switch) ROM Editor & Randomizer 项目地址: https://gitcode.com/gh_mirrors/pk/pkNX 你是否曾想过在宝可梦游戏中拥有独一无二的精灵阵容&#xff1f;是否希望调整训…...

Mastering Text Tokenization for Large Language Models: From Words to Embeddings

1. 文本标记化的核心概念 你可能已经听说过ChatGPT这类大语言模型的神奇能力&#xff0c;但你知道它们是如何"读懂"人类文字的吗&#xff1f;秘密就藏在文本标记化&#xff08;Tokenization&#xff09;这个关键步骤里。想象一下&#xff0c;我们要教一个完全不懂中…...

OpenHarmony 5.0.2 音频驱动适配实战:从ADM配置到耳机/扬声器切换

1. OpenHarmony音频驱动适配背景与问题定位 最近在RK3568平台上适配OpenHarmony 5.0.2的音频功能时&#xff0c;遇到了一个典型问题&#xff1a;使用RK809音频芯片时&#xff0c;耳机可以正常发声&#xff0c;但内置扬声器完全没声音&#xff0c;而且插入耳机后扬声器也不会自动…...