设计模式:命令模式(订单模式)c++ 实现

1、命令模式

可以理解为订单或则任务请求,将请求者与执行者分离开来,实现解耦,同时这也是一种面向接口编程

2、命令模式的一种实现方法:

command类:可以理解为菜单,有一个execute虚方法,用来执行请求(订单),子类需要重载该方法。

//订单 及命令类 一个方法用来执行命令 
class command 
{
private:
    /* data */
public:
    virtual void execute() ;
};


//*****************std;**********************************************
//这是一个命令的基础类  相当于 订单 命令
//***************************************************************
void command::execute() {
    cout<<"默认的执行\n";
}



class CommandTest :public command
{
private:
    Executor m_exe;
    CommandTest();
public:
    CommandTest(Executor exetor);
    ~CommandTest();

    void execute();
};

//继承了 命令的基础类 具体的任务
CommandTest::CommandTest(Executor exetor)
{
    cout<<("CommandTest :: 正在设置命令执行对象...\n");
    m_exe = exetor;
}

CommandTest::~CommandTest()
{
}

void CommandTest::execute() {
    cout<<("CommandTest :: 正在安排 执行对象 做事情 ...\n");
    m_exe.todosomeThing();
}

Executor类:执行者,用来执行订单类及其派生类中具体的事物,执行者与command的子类是对应的关系,也可以是一组的关系(比如通过继承Executor,重载Executor的执行方法,相当于不同的厨师做同一个菜,味道不一样)

class Executor
{
private:
    /* data */
public:
    void todosomeThing();
};

//***************************************************************
//这是一个执行 命令的类 及 执行者
//***************************************************************

void Executor::todosomeThing() {
    cout<<"Executor :: 正在做事情... \n";
}

contorl类:或者叫做派单机器,或者叫做点单员:用来将客户点的单传递给厨师让他根据订单做菜


class control
{
private:
    command * m_com ;
public:
    
    void setCommand(command   &com);
    void starCommand();
};


//***************************************************************
//这是一个发送 命令的类 及 控制者 客户 请求者
//***************************************************************

void control::setCommand(command &com)
{
    cout<<"control ::正在设置命令\n";
    m_com = &com;
}

void control::starCommand() {
    cout<<"control :: 开始执行命令\n";
    if(m_com != NULL) {
        m_com->execute();
    }
    else {
        cout<<("m_com为NULL 不做处理 \n" );
    }
}

main.cpp

#include <iostream>
#include "command.h"
using namespace std;

int main() {
    cout<<"helloworld \n";
    Executor exe =  Executor(); //创建一个执行者(招聘一个厨师)
    CommandTest com =  CommandTest(exe); //创建订单(订单指定厨师)
    control con =  control(); //创建一个服务员
    con.setCommand(com);//服务员讲订单拿到厨房
    con.starCommand();//服务员让厨师快点做菜

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值