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

【26】c++设计模式——>命令模式

c++命令模式

C++的命令模式是一种行为模式,通过将请求封装成对象,以实现请求发送者和接受者的解耦。
在命令模式中,命令被封装成一个包含特定操作的对象,这个对象包含的执行该操作的方法,以及一些必要的参数。命令对象可以被任意添加、删除或者修改,从而使得请求的发送者和接受者之间的关系变得灵活可配。
命令模式通过包含以下角色:
1.命令接口:定义了执行操作的方法;
2.具体命令:实现了命令接口,封装了具体的操作和接受者;
3.请求发送者:持有命令对象,并在需要时调用命令对象的执行方法来发起请求;
4.请求接受者:执行命令对象所指定的操作。
当请求发送者需要发送一个请求时,他创建一个具体命令对象并设置请求的接受者。然后,将命令对象传递给请求发送者,并由请求发送者调用命令对象的执行方法。命令对象会负责调用接受者的响应方法来执行请求中指定的操作。
优点:就是将请求封装成对象,提供一种灵活的方式来组织和管理请求,从而实现请求发送者和接受者之间的解耦。

代码实例

遥控器作为请求发送者,可以控制不同的家庭设备(灯,电视等),每个家庭设备都有相应的命令,每个命令包括特定的接受者。

#include<iostream>
using namespace std;
//命令接口
class Command 
{
public:virtual void execute() = 0;
};//具体命令类:扩展一个控制灯的命令
class LightCommand :public Command
{
private:class Light{public:void turnOn(){cout << "开灯" << endl;}void turnOff(){cout << "关灯" << endl;}};Light light;
public:void execute() override{light.turnOn();}
};//具体命令类:扩展一个控制电视的命令
class TVCommand :public Command
{
private:class TV{public:void turnOn(){cout << "开TV" << endl;}void turnOff(){cout << "关TV" << endl;}};TV tv;
public:void execute() override{tv.turnOn();}
};//命令发送者:遥控器
class RemoteControl
{
private:Command* command; //保存命令
public:void setCommand(Command* cmd){command = cmd;}void pressButton(){command->execute();}
};
int main()
{//创建一个遥控器:命令发送者RemoteControl rc;//创建两个命令:灯和TVLightCommand lc;TVCommand tv;//遥控器设置灯命令,然后发送rc.setCommand(&lc);rc.pressButton();//遥控器设置tv命令,然后发送rc.setCommand(&tv);rc.pressButton();
}

在这里插入图片描述

http://www.lryc.cn/news/193812.html

相关文章:

  • ElasticSearch容器化从0到1实践(一)
  • 【Vue面试题二十四】、Vue项目中有封装过axios吗?主要是封装哪方面的?
  • 旅游票务商城小程序的作用是什么
  • LabVIEW在安装了其它的NI软件之后崩溃了
  • 基于Java的个人健康管理系统设计与实现(源码+lw+部署文档+讲解等)
  • nginx https的配置方法
  • 使用WebDriver采样器将JMeter与Selenium集成
  • flink教程
  • 视频监控系统/安防视频平台EasyCVR广场视频细节优化
  • 电脑上播放4K视频需要具备哪些条件?
  • 测试除了点点点,还有哪些内容呢?
  • HTTP的本质理解
  • 微信小程序获取公众号的文章
  • 【算法|动态规划No.20】leetcode416. 分割等和子集
  • 深入解析C语言中的strstr函数
  • HDLbits: Fsm serial
  • LuaJit交叉编译移植到ARM Linux
  • 【RocketMQ系列一】初识RocketMQ
  • 【06】基础知识:React组件实例三大核心属性 - ref
  • Bootstrap-媒体类型
  • spring Cloud笔记--服务治理Eureka
  • pdf压缩文件怎么压缩最小?pdf压缩方法汇总
  • Golang学习记录:基础篇练习(一)
  • sql注入(7), python 实现盲注爆破数据库名, 表名, 列名
  • 2021年12月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 卡尔曼家族从零解剖-(01)预备知识点
  • 技术分享| 二进制部署MySQL
  • 3.1 模板测试与深度测试(Stencil Test Z Test)
  • 一些常见的必须会的谭浩强基本代码大全也是常考的应试是没问题的
  • C语言天花板——指针(进阶1)