设计模式----Command模式

本文通过电灯开关的例子介绍命令模式的设计理念与实现方法。命令模式将请求封装为对象,以便使用不同的请求、队列或者记录请求日志,同时支持可撤销的操作。文章详细展示了如何利用Command接口和具体命令类来实现这一模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令模式(Command)的目标是将一个请求封装成一个对象,因此可以参数化多个客户的不同请求,将请求排除,记录请求日志,并支持撤消操作。 结构图如下:


其实现思想是将一个请求封装到一个类中(Command),再提供接收对象(Receiver),最后Command命令由Invoker调用。

以一个电灯开关为例,命令的执行、不执行相对于开关的打开、关闭操作,由开关发出命令,电灯接收命令,结构图如下:


#include <iostream> using namespace std; class Light { public: Light(){}; virtual ~Light(){}; void TurnOn() { cout << "电灯打开了" << endl; } void TurnOff() { cout << "电灯关闭了" << endl; } }; class Command { public: virtual ~Command(){} virtual void Execute() = 0; virtual void UnExecute() = 0; protected: Command(){} }; class LightCommand : public Command { public: LightCommand(Light * pLight) { m_pLight = pLight; } virtual ~LightCommand() { if(m_pLight != NULL) { delete m_pLight; m_pLight = NULL; } } void Execute() { m_pLight->TurnOn(); } void UnExecute() { m_pLight->TurnOff(); } private: Light* m_pLight; }; class Switch { public: Switch(Command* pCommand) { m_pCommand = pCommand; } virtual ~Switch(){} void Open() { m_pCommand->Execute(); } void Close() { m_pCommand->UnExecute(); } private: Command* m_pCommand; }; int main(int argc, char* argv[]) { Light* pLight = new Light; Command* pCommand = new LightCommand(pLight); Switch* pSwitch = new Switch(pCommand); pSwitch->Open(); pSwitch->Close(); return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值