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

【C++】命令模式

目录

  • 一、模式核心概念与结构
  • 二、C++ 实现示例:遥控器与家电控制
  • 三、命令模式的关键特性
  • 四、应用场景
  • 五、命令模式与其他设计模式的关系
  • 六、C++ 标准库中的命令模式应用
  • 七、优缺点分析
  • 八、实战案例:数据库事务命令
  • 九、实现注意事项
    • 如果这篇文章对你有所帮助,渴望获得你的一个点赞!

命令模式(Command Pattern)是一种【行为型】设计模式,它将请求封装为对象,从而使你可以用不同的请求对客户端进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。这种模式将发起请求的对象(客户端)与执行请求的对象(接收者)解耦,通过命令对象作为中间层来协调两者。

一、模式核心概念与结构

命令模式包含四个核心角色:

  1. 命令接口(Command):定义执行操作的接口,通常包含execute()方法。
  2. 具体命令(Concrete Command):实现命令接口,持有接收者的引用,并调用接收者的相应方法。
  3. 接收者(Receiver):知道如何执行与请求相关的操作,负责具体业务逻辑。
  4. 调用者(Invoker):持有命令对象并触发执行,不直接与接收者交互。

二、C++ 实现示例:遥控器与家电控制

以下是一个经典的命令模式示例,演示如何用命令模式实现家电的远程控制:

#include <iostream>
#include <string>
#include <memory>
#include <vector>// 接收者:家电
class Light {
public:void turnOn() { std::cout << "Light is on" << std::endl; }void turnOff() { std::cout << "Light is off" << std::endl; }
};class TV {
public:void turnOn() { std::cout << "TV is on" << std::endl; }void turnOff() { std::cout << "TV is off" << std::endl; }void setChannel(int channel) {std::cout << "TV channel set to " << channel << std::endl;}
};// 命令接口
class Command {
public:virtual ~Command() = default;virtual void execute() = 0;virtual void undo() = 0;  // 支持撤销操作
};// 具体命令:开灯命令
class LightOnCommand : public Command {
private:std::shared_ptr<Light> light;public:LightOnCommand(std::shared_ptr<Light> l) : light(l) {}void execute() override {light->turnOn();}void undo() override {light->turnOff();}
};// 具体命令:关灯命令
class LightOffCommand : public Command {
private:std::shared_ptr<Light> light;public:LightOffCommand(std::shared_ptr<Light> l) : light(l) {}void execute() override 
http://www.lqws.cn/news/542575.html

相关文章:

  • iOS App 上架常见问题解决方案:六大难点与实战工具分工详解
  • MCP-安全(代码实例)
  • 鸿蒙OH南向开发 小型系统内核(LiteOS-A)【文件系统】上
  • Web基础关键_003_CSS(一)
  • 3.web逆向之开发者工具调试
  • Guava Cache 本地项目缓存
  • JDBC 工具类:1.0到3.0版本
  • leetcode 295. 数据流的中位数
  • element-plus限制日期可选范围(这里以7天为例)
  • Unity 脚本自动添加头部注释
  • Qwen VLo :一个多模态统一理解与生成模型
  • 在shell中直接调用使用R
  • 【容器】容器平台初探 - k8s整体架构
  • RJ45 以太网与 5G 的原理解析及区别
  • swagger访问不了的解决方案 http://localhost:8080/swagger-ui/index.html
  • 可编辑37页PPT | 数字化转型咨询规划方案
  • Mysql Mybatis批量插入和批量更新数据
  • 设计模式 | 适配器模式
  • LaTeX下载与实践入门指南
  • 在 Dev Container 中实现 GUI 开发的解决方案
  • 报表控件stimulsoft教程:在报表、仪表板和 PDF 表单自动生成缩略图
  • SQL Server 中 GO 的作用
  • mPaaS 客户端诊断概述
  • CSS3实现同心圆效果
  • Go 语言中的 package 和 go modules
  • (二)YOLOV12部署训练
  • 人工智能-基础篇-1-人工智能介绍(发展史,技术体系,技术基础,主要领域,前景和挑战)
  • macOS,切换 space 失效,向右切换space(move right a space) 失效
  • Django导入错误:`from django.conf.urls import url` 的终极解决方案
  • 【机器学习深度学习】线性回归(基本模型训练流程)