c++ 命令模式(command)
命令模式的有点:
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)的更多相关文章
- 设计模式 - 命令模式(command pattern) 多命令 具体解释
命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...
- 设计模式 - 命令模式(command pattern) 具体解释
命令模式(command pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 命令模式(command pattern) : 将请求封装成对 ...
- 设计模式 ( 十三 ) 命令模式Command(对象行为型)
设计模式 ( 十三 ) 命令模式Command(对象行为型) 1.概述 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需 ...
- 设计模式 - 命令模式(command pattern) 宏命令(macro command) 具体解释
命令模式(command pattern) 宏命令(macro command) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考: 命名模式(撤销) ...
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...
- 命令模式 Command 行为型 设计模式(十八)
命令模式(Command) 请分析上图中这条命令的涉及到的角色以及执行过程,一种可能的理解方式是这样子的: 涉及角色为:大狗子和大狗子他妈 过程为:大狗子他妈角色 调用 大狗子的“回家吃饭”方法 引子 ...
- Java 设计模式系列(十四)命令模式(Command)
Java 设计模式系列(十四)命令模式(Command) 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复 ...
- 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释
命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.cs ...
- 二十四种设计模式:命令模式(Command Pattern)
命令模式(Command Pattern) 介绍将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作. 示例有一个Message实体类,某个 ...
- 设计模式-15命令模式(Command Pattern)
1.模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使 ...
随机推荐
- js验证手机号码,邮箱,qq号
function validateMail(str:String) { var re_m = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2} ...
- bzoj2748(HAOI2018)音量调节
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2748 水得不想写.别忘了-1. #include<iostream> #incl ...
- Java 实现 RSA 非对称加密
非对称加密算法:用两个密钥(公钥/私钥)对数据进行加密和解密. 一.原理 非对称加密算法实现机密信息交换的基本过程是: 1)甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开; 2)得到该公用密钥 ...
- sql语句查询重复数据
select id, name, memofrom Awhere id in (select id from A group by id having count(1) >= 2)
- 贴几个erlang文档站点
国外三方的文档,比较全, http://erldocs.com/ 这个貌似是国内的版本,不是很新 http://erldoc.com/ 国内dhq大神的,也不是很新 http://dhq.me/erl ...
- JAVA课程设计(坦克大战)
2019-01-16 坦克大战游戏背景: 1. 需求分析 1.1环境要求 操作系统:Windows 7(SP1)以上 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 1.2角 ...
- MongoDB在windows平台分片集群部署
本文转载自:https://www.cnblogs.com/hx764208769/p/4260177.html 前言-为什么我要使用mongodb 最近我公司要开发一个日志系统,这个日志系统包括很多 ...
- 【转】使用 JMeter 完成常用的压力测试
本文介绍了 JMeter 相关的基本概念.并以 JMeter 为例,介绍了使用它来完成最常用的三种类型服务器,即 Web 服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项. ...
- Java 静态对象 static
什么是静态变量 大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立. 然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 static 大显身手的时候了 ...
- PHP 循环删除无限分类子节点
<?php private function _deleteSubNode($ids){ $subNodes = array(); $mod = D('Node'); foreach (expl ...