命令模式的有点:

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. jQuery的页面初始化操作写法

    $(document).ready(function(){ alert("第一种方法."); }); $(function(){ alert("第二种方法.") ...

  2. bzoj 1101 [POI2007]Zap——反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 #include<cstdio> #include<cstring& ...

  3. easyui datagrid 基础方法和事件

    数据表格属性(DataGrid Properties) 属性继承控制面板,以下是数据表格独有的属性. 名称 类型 描述 默认值 columns array 数据表格列配置对象,查看列属性以获取更多细节 ...

  4. Eclipse编译问题

    问题现象:Maven编译ok,Eclipse始终存在编译错误,点了工程的刷新,没用,点了Eclipse上面的菜单Project -> Clean,也没用.后来看了下工作空间项目目录,发现.cla ...

  5. Unit04: JSP基本语法 、 JSP运行原理

    Unit04: JSP基本语法 . JSP运行原理 hello.jsp <%@page pageEncoding="utf-8"%> <!doctype html ...

  6. Python Socke

    回射 SERVER #!/usr/bin/python3 #_*_ coding:utf- _*_ import socket,os,time import socketserver import t ...

  7. beego的配置文件记录

    摘自https://github.com/beego/tutorial/blob/master/zh/3/params.slide * beego的默认参数 - AppName 应用名称,默认是 be ...

  8. 安全人员常用的python库

    如果你对漏洞挖掘.逆向工程分析或渗透测试感兴趣的话,我第一个要推荐给你的就是Python编程语言.Python不仅语法简单上手容易,而且它还有大量功能强大的库和程序可供我们使用.在这篇文章中,我们会给 ...

  9. 重置mysql的root用户密码

    /etc/rc.d/init.d/mysql status /etc/rc.d/init.d/mysql stop mysqld_safe --skip-grant-tables& mysql ...

  10. 脱壳系列(一) - CrypKeySDK 壳

    程序: 运行 用 PEiD 载入程序 PEid 显示找不到相关的壳 脱壳: 用 OD 载入程序 这个是壳的入口地址 因为代码段的入口地址为 00401000 这三个是壳增加的区段 按 F8 往下走程序 ...