美文网首页
c++命令模式

c++命令模式

作者: 一路向后 | 来源:发表于2021-02-17 21:09 被阅读0次

1.命令模式简介

   将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志。以及支持可撤销的操作。

2.源码实现

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

//烤肉师傅
class BarbecueMaster
{
public:
    void MakeMutton()
    {
        cout << "烤羊腿喽" << endl;
    }

    void MakeChiken()
    {
        cout << "烤鸡肉喽" << endl;
    }
};

//命令类
class Command
{
protected:
    BarbecueMaster *m_master;

public:
    Command(BarbecueMaster *p)
    {
        m_master = p;
    }

    virtual void executeCmd() = 0;
};

class CommandMutton : public Command
{
public:
    CommandMutton(BarbecueMaster *p) : Command(p) {};

    void executeCmd()
    {
        m_master->MakeMutton();
    }
};

class CommandChiken : public Command
{
public:
    CommandChiken(BarbecueMaster *p) : Command(p) {};

    void executeCmd()
    {
        m_master->MakeChiken();
    }
};

//服务员
class Waiter
{
private:
    vector<Command *> m_vec;

public:
    ~Waiter()
    {
        for(auto it=m_vec.begin(); it!=m_vec.end(); it++)
        {
            delete(*it);
        }

        m_vec.clear();
    }

    void add(Command *p)
    {
        m_vec.push_back(p);
    }

    void remove(Command *p)
    {
        for(auto it=m_vec.begin(); it!=m_vec.end(); it++)
        {
            if(*it == p)
            {
                delete(*it);
                break;
            }
        }
    }

    void submitCmd()
    {
        for(auto it=m_vec.begin(); it!=m_vec.end(); it++)
        {
            (*it)->executeCmd();
        }
    }
};

int main(int argc, char **argv)
{
    Waiter *pWaiter = new Waiter();
    BarbecueMaster *pBarbecueMaster = new BarbecueMaster();

    pWaiter->add(new CommandMutton(pBarbecueMaster));
    pWaiter->add(new CommandChiken(pBarbecueMaster));
    pWaiter->add(new CommandMutton(pBarbecueMaster));

    pWaiter->submitCmd();

    delete pBarbecueMaster;
    delete pWaiter;

    return 0;
}

3.编译源码

$ g++ -o example example.cpp

4.运行及其结果

$ ./example
烤羊腿喽
烤鸡肉喽
烤羊腿喽

相关文章

  • 命令模式C++

    命令模式,是将一个请求封装为一个对象,从而使我们可以用不同的请求对客户进行参数化、对请求排队或记录请求日志,以及支...

  • c++命令模式

    1.命令模式简介    将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志...

  • 【C++设计模式】命令模式

  • Mac上使用VsCode创建c++项目

    1、准备工作安装C/C++插件 2、[⇧⌘P]打开命令模式,选择[C/Cpp: Edit Configuratio...

  • C++ 设计模式 —— 14.命令模式

    命令模式:一种行为型设计模式 应用场景:在GOF的《设计模式:可复用面向对象软件的基础》一书中对命令模式是这样说的...

  • 12.vim的使用技巧

    命令模式 、命令行模式、编辑模式: INSERT 首次进入文件: 命令模式输入: 表示 命令行模式出现...

  • 五、Linux vim编辑器

    vim编辑器三种模式:命令模式、编辑模式、末行模式 1.命令模式: vim进入文件后就是命令模式 1.1 命令模式...

  • 终端操作文件

    VIM 模式切换从命令模式->编辑模式:i,a,o,I,A,O从编辑模式->命令模式:ESC从命令模式->末行模式...

  • vim 操作 && Mac 配置本地Apache

    一、vim 的基本命令操作 vim 的模式: 编辑模式 ,命令模式 编辑模式: 命令模式:可以通过命令 最重要的命...

  • Vim高效编辑器

    Vim程序员高效编辑器 命令模式,输入模式,底线命令模式 默认进入vim就是命令模式,输入i变为输入模式 命令模式...

网友评论

      本文标题:c++命令模式

      本文链接:https://www.haomeiwen.com/subject/abjwxltx.html