【C++】命令模式
目录
- 一、模式核心概念与结构
- 二、C++ 实现示例:遥控器与家电控制
- 三、命令模式的关键特性
- 四、应用场景
- 五、命令模式与其他设计模式的关系
- 六、C++ 标准库中的命令模式应用
- 七、优缺点分析
- 八、实战案例:数据库事务命令
- 九、实现注意事项
- 如果这篇文章对你有所帮助,渴望获得你的一个点赞!
命令模式(Command Pattern)是一种【行为型】设计模式,它将请求封装为对象,从而使你可以用不同的请求对客户端进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。这种模式将发起请求的对象(客户端)与执行请求的对象(接收者)解耦,通过命令对象作为中间层来协调两者。
一、模式核心概念与结构
命令模式包含四个核心角色:
- 命令接口(Command):定义执行操作的接口,通常包含
execute()
方法。 - 具体命令(Concrete Command):实现命令接口,持有接收者的引用,并调用接收者的相应方法。
- 接收者(Receiver):知道如何执行与请求相关的操作,负责具体业务逻辑。
- 调用者(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