设计师必须知道的十个网站,网站定制公司推荐,百度指数的需求指数,空间站 参考消息c命令模式
C的命令模式是一种行为模式#xff0c;通过将请求封装成对象#xff0c;以实现请求发送者和接受者的解耦。 在命令模式中#xff0c;命令被封装成一个包含特定操作的对象#xff0c;这个对象包含的执行该操作的方法#xff0c;以及一些必要的参数。命令对象可以…c命令模式
C的命令模式是一种行为模式通过将请求封装成对象以实现请求发送者和接受者的解耦。 在命令模式中命令被封装成一个包含特定操作的对象这个对象包含的执行该操作的方法以及一些必要的参数。命令对象可以被任意添加、删除或者修改从而使得请求的发送者和接受者之间的关系变得灵活可配。 命令模式通过包含以下角色 1.命令接口定义了执行操作的方法 2.具体命令实现了命令接口封装了具体的操作和接受者 3.请求发送者持有命令对象并在需要时调用命令对象的执行方法来发起请求 4.请求接受者执行命令对象所指定的操作。 当请求发送者需要发送一个请求时他创建一个具体命令对象并设置请求的接受者。然后将命令对象传递给请求发送者并由请求发送者调用命令对象的执行方法。命令对象会负责调用接受者的响应方法来执行请求中指定的操作。 优点就是将请求封装成对象提供一种灵活的方式来组织和管理请求从而实现请求发送者和接受者之间的解耦。
代码实例
遥控器作为请求发送者可以控制不同的家庭设备灯电视等每个家庭设备都有相应的命令每个命令包括特定的接受者。
#includeiostream
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;//创建两个命令:灯和TVLightCommand lc;TVCommand tv;//遥控器设置灯命令,然后发送rc.setCommand(lc);rc.pressButton();//遥控器设置tv命令,然后发送rc.setCommand(tv);rc.pressButton();
}在这里插入图片描述