设计模式--Command模式

命令模式(Command Pattern)是一种行为设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。

命令模式主要包含以下几个角色:

  1. Command(抽象命令类):声明执行操作的接口。
  2. ConcreteCommand(具体命令类):是一个具体的命令,将一个接收者对象绑定于一个动作,调用接收者相应的操作,以实现Execute。
  3. Invoker(调用者):要求该命令执行这个请求。
  4. Receiver(接收者):知道如何实施与执行一个请求相关的操作。

命令模式的主要优点是:

  • 降低系统的耦合度。
  • 新的命令可以很容易地加入到系统中。
    命令模式适用于以下场景:
  • 支持撤销的操作。
  • 支持修改、排队或者追踪请求。
  • 如果一个请求的接收者不明确,或者一个请求需要被多个对象处理。
  • 用于处理一系列请求,可以进行批处理。

以下是一个简单的C++实现的命令模式(Command Pattern)示例:

复制代码
#include <iostream>

// 抽象命令类
class Command {
public:
    virtual void execute() = 0;
    virtual ~Command() {}
};

// 接收者类
class Receiver {
public:
    void action() {
        std::cout << "Receiver action..." << std::endl;
    }
};

// 具体命令类
class ConcreteCommand : public Command {
public:
    ConcreteCommand(Receiver* receiver) : receiver_(receiver) {}
    void execute() override {
        receiver_->action();
    }

private:
    Receiver* receiver_;
};

// 调用者类
class Invoker {
public:
    Invoker(Command* command) : command_(command) {}
    void call() {
        command_->execute();
    }

private:
    Command* command_;
};

int main() {
    Receiver* receiver = new Receiver();
    Command* command = new ConcreteCommand(receiver);
    Invoker* invoker = new Invoker(command);

    invoker->call();

    delete invoker;
    delete command;
    delete receiver;

    return 0;
}

在这个例子中,Command是抽象命令类,定义了一个execute接口。ConcreteCommand是具体命令类,实现了execute接口。

Receiver是接收者类,它知道如何实施和执行一个请求相关的操作。在ConcreteCommand的execute接口中,调用了Receiver的action接口。

Invoker是调用者类,它要求命令执行一个请求,也就是调用命令的execute接口。

通过这种方式,我们可以将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。

相关推荐
OPEN-F2 小时前
C++进阶教程:继承与多态
开发语言·c++
luj_17684 小时前
大律师考核应重能力与科技素养
c语言·开发语言·c++·经验分享·算法
刃神太酷啦4 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
汉克老师7 小时前
CSP-J 初赛(以满分为目标):第十五课《结构体、排序与自定义比较——从“给数字排队”到“给一群人排队”》
c++·csp-j·小学生·学c++编程
HugoStudio_SWAN8 小时前
C++ CMD 互动动画:按键触发爆炸效果
开发语言·c++·学习·程序人生
水饺编程8 小时前
第5章,[Win32 章节] :Polygon 函数和多边形填充模式
c语言·c++·windows·visual studio
wuminyu8 小时前
Java FFM处理网络读写事件源码剖析
java·linux·c语言·jvm·c++
一木 之林9 小时前
C/C++ 面向对象编程(OOP)(进阶)
java·c语言·c++
千谦阙听10 小时前
C++篇:类和对象(上)
开发语言·c++
_Narcissus_11 小时前
分治&递归
数据结构·c++·笔记·算法·leetcode·递归·分治