C++设计模式——命令模式
命令模式:将一个请求封装为一个对象....从而使得你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作
代码:
#include <iostream> using namespace std; //Receiver类 知道如何实施与执行一个与请求相关的操作,任何类都可能作为一个接收者 class Receiver { public: void action() { cout << "请求执行!" << endl; } }; //Command类,用来声明执行操作的接口 class Command { protected: Receiver* receiver; public: Command(Receiver* receiver):receiver(receiver){} virtual ~Command() {}; virtual void Execute() = 0;//抽象执行命令接口 }; //ConcreteCommand类 将一个接收者对象绑定于一个动作 调用接收者相应的操作 以实现Execute class ConcreteCommand :public Command { public: ConcreteCommand(Receiver* receiver):Command(receiver) { } virtual void Execute() { receiver->action(); } }; //Invoker类,要求该命令执行这个请求 class Invoker { private: Command* command; public: void SetCommand(Command* command) { this->command = command; } void ExecuteCommand() { return command->Execute(); } }; int main() { Receiver* r = new Receiver(); Command* c = new ConcreteCommand(r); Invoker* i = new Invoker(); i->SetCommand(c); i->ExecuteCommand(); delete i; i = nullptr; delete c; c = nullptr; delete r; r = nullptr; system("pause"); return 0; }
优点
命令模式的优点
- 它能较容易的设计一个命令队列;
- 在需要的情况下,可以较容易的将命令计入日志;
- 允许接收请求的一方决定是否要否决请求;
- 可以容易的实现对请求的撤销和重做;
- 由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易;
- 把请求一个操作的对象与知道怎么执行一个操作的对象分隔开;
缺点
模式的缺点
如果命令很多,Command类会很多,增加系统复杂性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!