命令模式的有点:

1.能够容易地设计一个命令队列;

2.在需要的情况下,可以比较容易地将命令记入日志。

3.可以容易的实现对请求的撤销和重做。

4.由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易。

#include <iostream>
#include <vector> using namespace std; class Reciever
{
public:
void Action()
{
cout << "Do action !!" <<endl;
}
}; class Icommand
{
public:
virtual ~Icommand() {}
virtual void Excute() = ;
protected:
Icommand() {}
}; class Read_Command:public Icommand
{
public:
Read_Command(Reciever *rev):m_rev(rev)
{ }
virtual void Excute()
{
cout << "Read Command.." << endl;
m_rev->Action();
}
~Read_Command()
{ }
private:
Reciever *m_rev;
}; class Write_Command:public Icommand
{
public:
Write_Command(Reciever *rev):m_rev(rev)
{ }
virtual void Excute()
{
cout << "Read Command.." << endl;
m_rev->Action();
}
~Write_Command()
{ }
private:
Reciever *m_rev;
}; class Invoker
{
public:
Invoker(Icommand* cmd):m_cmd(cmd)
{ }
Invoker()
{ }
~Invoker()
{
delete m_cmd;
}
void Notify()
{
std::vector<Icommand*>::iterator it = cmdList.begin();
for(it;it != cmdList.end();++it)
{
m_cmd = *it;
m_cmd->Excute();
}
}
void AddCmd(Icommand* pcmd)
{
cmdList.push_back(pcmd);
}
void DelCmd(Icommand* pcmd)
{
//cmdList.pop_back();
} private:
Icommand* m_cmd;
std::vector<Icommand*> cmdList;
};

主函数:

#include <iostream>
#include <vector>
#include "command.h" using namespace std; int main()
{
Reciever* rev = new Reciever();
Icommand* cmd1 = new Read_Command(rev);
Icommand* cmd2 = new Write_Command(rev);
Invoker inv; inv.AddCmd(cmd1);
inv.AddCmd(cmd2);
inv.Notify(); system("pause");
return ;
}

c++ 命令模式(command)的更多相关文章

  1. 设计模式 - 命令模式(command pattern) 多命令 具体解释

    命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...

  2. 设计模式 - 命令模式(command pattern) 具体解释

    命令模式(command pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 命令模式(command pattern) : 将请求封装成对 ...

  3. 设计模式 ( 十三 ) 命令模式Command(对象行为型)

    设计模式 ( 十三 ) 命令模式Command(对象行为型) 1.概述         在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需 ...

  4. 设计模式 - 命令模式(command pattern) 宏命令(macro command) 具体解释

    命令模式(command pattern) 宏命令(macro command) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考: 命名模式(撤销) ...

  5. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  6. 命令模式 Command 行为型 设计模式(十八)

    命令模式(Command) 请分析上图中这条命令的涉及到的角色以及执行过程,一种可能的理解方式是这样子的: 涉及角色为:大狗子和大狗子他妈 过程为:大狗子他妈角色 调用 大狗子的“回家吃饭”方法 引子 ...

  7. Java 设计模式系列(十四)命令模式(Command)

    Java 设计模式系列(十四)命令模式(Command) 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复 ...

  8. 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释

    命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.cs ...

  9. 二十四种设计模式:命令模式(Command Pattern)

    命令模式(Command Pattern) 介绍将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作. 示例有一个Message实体类,某个 ...

  10. 设计模式-15命令模式(Command Pattern)

    1.模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使 ...

随机推荐

  1. 02 - Unit01:服务器返回数据的json处理+搭建项目环境

    服务器返回数据的json处理+搭建项目环境 服务器返回数据的json处理 springMVC JSP响应流程 请求 -->DispatcherServlet -->HandlerMappi ...

  2. demo 记录 通用方法什么的到这里抄一下

    function killerrors() { return true; } window.onerror = killerrors; //检查浏览器类型 function checkBrowser( ...

  3. 对SQLite数据库操作 操作db文件

    sqlite数据库就是一个DB文件.  程序每操作一次数据库都要读一次 .DB  文件 .  这个文件就是这个SQLite数据库. 如果需要依赖包的可以联系我 工具类: package com.hot ...

  4. Nginx RTMP 模块 nginx-rtmp-module 指令详解

    译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...

  5. 关于使用PyExecJS+nodejs使用与js反混淆

    来源:https://cuiqingcai.com/5024.html 梳理这篇博客的时候出问题,我默认的是jscript作为pyexcJs的引擎,问题很大,大部分的js都无法加载,各种包用不了,只能 ...

  6. PDA后台运行、安装程序

    ////启动最新版本安装(后台安装模式),结束更新程序            //string cabPath = @"\Application Data\QY.DDM.PDA.CAB&qu ...

  7. 【学习笔记】Manacher

    扔板子跑路 代码 POJ3974 #include <cstdio> #include <cstring> #include <algorithm> using n ...

  8. CentOS 7 创建桌面快捷方式

    一,在桌面新建一个文件 文件名随意,但必须带有.desktop的后缀名, 以Eclipse为例 vi /home/lenmom/Desktop/eclipse.desktop 其中: lenmom 是 ...

  9. 初探asciinema

    在学习c++的时候想到so库注入到某些程序中,网上查了一些资料,发现了一些比较好玩的程序,分享一下. 主要可以对操作的进行视频回放,类似堡垒机的功能 安装: pip3 install asciinem ...

  10. django-bower

    https://django-bower.readthedocs.io/en/latest/usage.html