当前位置: 首页> 教育> 培训 > 7k7k传奇世界网页版_网站建设报价包括哪些_最近疫情最新消息_网络营销网课

7k7k传奇世界网页版_网站建设报价包括哪些_最近疫情最新消息_网络营销网课

时间:2025/7/12 5:50:29来源:https://blog.csdn.net/qq_39085747/article/details/143280179 浏览次数:0次
7k7k传奇世界网页版_网站建设报价包括哪些_最近疫情最新消息_网络营销网课

命令模式(Command Pattern)是一种行为设计模式,它将请求封装成一个对象,从而使得可以参数化客户端对象传递不同的请求,并且能够支持请求的排队、记录请求日志、撤销操作等。在命令模式中,请求发送者和请求接收者之间通过命令对象进行解耦,从而实现了请求发送者和请求接收者之间的松耦合。

下面是一个使用QT C++编写的简单命令模式示例,

代码演示:

#include <QCoreApplication>
#include <QDebug>
#include <QString>// 命令接口 作为一个基类
class Command {
public:virtual ~Command() {}virtual void execute() = 0;    // 执行virtual void undo() = 0;        // 撤销    
};// 具体命令类 继承命令接口类
class LightOnCommand : public Command {
public:void execute() override {qDebug() << "开灯";}void undo() override {qDebug() << "撤销开灯";}
};class LightOffCommand : public Command {
public:void execute() override {qDebug() << "关灯";}void undo() override {qDebug() << "撤销关灯";}
};// 命令调用者
class RemoteControl {
public:// 可以接收命令基类对象指针void setCommand(Command* command) {m_command = command;}void pressButton() {if (m_command) {m_command->execute();m_undoStack.push(m_command);    // 将对象入栈} else {qDebug() << "无命令写入";}}void undoButton() {if (!m_undoStack.empty()) {Command* lastCommand = m_undoStack.top();    // 取出栈顶部对象(最后一个加入容器的对象)lastCommand->undo();m_undoStack.pop();    // 删除顶部对象} else {qDebug() << "无撤销操作";}}private:Command* m_command;    // 保存命令对象指针std::stack<Command*> m_undoStack;    // 栈容器,用于保存使用过命令的对象
};int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 创建命令调用者对象RemoteControl remote;// 创建两个不同的命令对象LightOnCommand lightOnCmd;LightOffCommand lightOffCmd;// 将不同的命令对象传入 调用者对象 ,然后执行命令remote.setCommand(&lightOnCmd);remote.pressButton();remote.setCommand(&lightOffCmd);remote.pressButton();remote.undoButton();return a.exec();
}

优点:

  1. 松耦合:命令模式将请求发送者和请求接收者解耦,使得请求发送者无需知道请求接收者的具体实现,从而降低系统的耦合度。

  2. 可扩展性:通过添加新的命令类,可以轻松地扩展系统的功能,而无需修改现有的代码。

  3. 支持撤销和重做:由于命令对象封装了请求,可以轻松地实现请求的撤销和重做操作。

  4. 支持日志记录:可以通过保存命令对象的历史记录,实现日志记录功能,便于跟踪和调试。

缺点:

  1. 类爆炸:如果系统中有大量的命令类,可能会导致类的数量急剧增加,增加系统的复杂性。

  2. 增加代码量:引入命令模式会增加额外的类和对象,可能会增加代码量,使得代码变得更加复杂。

  3. 可能降低性能:由于命令模式需要创建额外的对象来封装请求,可能会导致一定程度上的性能损失。

总的来说,命令模式在需要将请求发送者和请求接收者解耦、支持撤销和重做、支持日志记录等场景下非常有用。在实际应用中,需要根据具体的需求和场景权衡其优缺点,选择合适的设计模式。

关键字:7k7k传奇世界网页版_网站建设报价包括哪些_最近疫情最新消息_网络营销网课

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: