【C++】命令模式

目录

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

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

一、模式核心概念与结构

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

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

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

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

#include 
#include 
#include 
#include 

// 接收者:家电
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 

你可能感兴趣的:(【C++】命令模式)