c++命令模式
C++的命令模式是一种行为模式,通过将请求封装成对象,以实现请求发送者和接受者的解耦。
在命令模式中,命令被封装成一个包含特定操作的对象 ,这个对象包含的执行该操作的方法,以及一些必要的参数。命令对象可以被任意添加、删除或者修改,从而使得请求的发送者和接受者之间的关系变得灵活可配。
命令模式通过包含以下角色:
1.命令接口:定义了执行操作的方法;
2.具体命令:实现了命令接口,封装了具体的操作和接受者;
3.请求发送者:持有命令对象,并在需要时调用命令对象的执行方法来发起请求;
4.请求接受者:执行命令对象所指定的操作。
当请求发送者需要发送一个请求时,他创建一个具体命令对象并设置请求的接受者。然后,将命令对象传递给请求发送者,并由请求发送者调用命令对象的执行方法。命令对象会负责调用接受者的响应方法来执行请求中指定的操作。
优点:就是将请求封装成对象,提供一种灵活的方式来组织和管理请求,从而实现请求发送者和接受者之间的解耦。
代码实例
遥控器作为请求发送者,可以控制不同的家庭设备(灯,电视等),每个家庭设备都有相应的命令,每个命令包括特定的接受者。
cpp
#include<iostream>
using namespace std;
//命令接口
class Command
{
public:
virtual void execute() = 0;
};
//具体命令类:扩展一个控制灯的命令
class LightCommand :public Command
{
private:
class Light
{
public:
void turnOn()
{
cout << "开灯" << endl;
}
void turnOff()
{
cout << "关灯" << endl;
}
};
Light light;
public:
void execute() override
{
light.turnOn();
}
};
//具体命令类:扩展一个控制电视的命令
class TVCommand :public Command
{
private:
class TV
{
public:
void turnOn()
{
cout << "开TV" << endl;
}
void turnOff()
{
cout << "关TV" << endl;
}
};
TV tv;
public:
void execute() override
{
tv.turnOn();
}
};
//命令发送者:遥控器
class RemoteControl
{
private:
Command* command; //保存命令
public:
void setCommand(Command* cmd)
{
command = cmd;
}
void pressButton()
{
command->execute();
}
};
int main()
{
//创建一个遥控器:命令发送者
RemoteControl rc;
//创建两个命令:灯和TV
LightCommand lc;
TVCommand tv;
//遥控器设置灯命令,然后发送
rc.setCommand(&lc);
rc.pressButton();
//遥控器设置tv命令,然后发送
rc.setCommand(&tv);
rc.pressButton();
}
在这里插入图片描述