大话设计模式--命令模式 Command -- C++实现实例
1. 命令模式: 将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
命令模式有点:
a. 较容易的设计一个命令队列
b. 在需要的的情况下,可以较容易的将命令加入日志
c. 允许请求的一方决定是否要否决请求。
d. 可以容易的实现对请求的撤销和重做。
e. 加入具体新的命令类不影响其他的类。
实例:
receiver.h receiver.cpp 实际操作者 烤肉者
#ifndef RECEIVER_H
#define RECEIVER_H class Receiver
{
public:
Receiver();
void action();
}; #endif // RECEIVER_H
#include "receiver.h"
#include <stdio.h> Receiver::Receiver()
{
} void Receiver::action()
{
printf("Receiver action\n");
}
command.h command.cpp 命令抽象
#ifndef COMMAND_H
#define COMMAND_H #include "receiver.h" class Command
{
public:
Command(Receiver *receiver);
void virtual execute()=0; protected:
Receiver *receiver;
}; #endif // COMMAND_H
#include "command.h" Command::Command(Receiver *receiver)
{
this->receiver = receiver;
}
concretecommand.h concretecommand.cpp 实际命名
#ifndef CONCRETECOMMAND_H
#define CONCRETECOMMAND_H #include "command.h" class ConcreteCommand : public Command
{
public:
ConcreteCommand(Receiver *receiver);
void execute();
}; #endif // CONCRETECOMMAND_H
#include "concretecommand.h" ConcreteCommand::ConcreteCommand(Receiver *receiver) : Command(receiver)
{
} void ConcreteCommand::execute()
{
receiver->action();
}
invoker.h invoker.cpp
#ifndef INVOKER_H
#define INVOKER_H #include "command.h"
#include <QList> class Invoker
{
public:
Invoker();
void addCommand(Command *command);
void executeCommand(); private:
QList<Command*> *commandList;
}; #endif // INVOKER_H
#include "invoker.h" Invoker::Invoker()
{
commandList = new QList<Command*>();
} void Invoker::addCommand(Command *command)
{
commandList->push_back(command);
} void Invoker::executeCommand()
{
for(int i=0; i!=commandList->count(); i++)
{
commandList->at(i)->execute();
}
}
main.cpp
#include <QCoreApplication>
#include <QDebug>
#include "invoker.h"
#include "concretecommand.h" int main(int argc, char *argv[])
{
qDebug() << "Command test" ; Receiver *r = new Receiver();
Command *c1 = new ConcreteCommand(r);
Command *c2 = new ConcreteCommand(r);
Invoker *i = new Invoker();
i->addCommand(c1);
i->addCommand(c2);
i->executeCommand();
}
大话设计模式--命令模式 Command -- C++实现实例的更多相关文章
- linkin大话设计模式--命令模式
linkin大话设计模式--命令模式 首先考虑一种应用情况,某个方法需要完成某一个功能,这个功能的大部分功能已经确定了,但是有可能少量的步骤没法确定,必须等到执行这个方法才可以确定. 也就是说,我们写 ...
- 设计模式 - 命令模式(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 pattern) 宏命令(macro command) 具体解释
命令模式(command pattern) 宏命令(macro command) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考: 命名模式(撤销) ...
- 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释
命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.cs ...
- 设计模式-命令模式(Command)
关注公众号 JavaStorm 获取更多成长. 大约需要6分钟读完.建议收藏后阅读. 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日 ...
- 设计模式--命令模式Command(对象行为型)
一.命令模式 将一个请求封装为一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. (1)Command类:是一个抽象类,类中对需要执行的命令进行 ...
- C#设计模式——命令模式(Command Pattern)
一.概述通常来说,“行为请求者”与“行为实现者”是紧耦合的.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这些情况下,将“行为请求者”与“行为实 ...
- 大话设计模式--工厂模式 factory -- C++实现实例
实现<大话设计模式>的C++版本... 1. 工厂模式 使用的范围是 同一个基类,下面很多子类. (1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就 ...
随机推荐
- 图解WinHex使用入门
一 Winhex和相关概念简单介绍 1 Winhex 是在Windows下执行的十六进制编辑软件,此软件功能很强大,有完好的分区管理功能和文件管理功能.能自己主动分析分区链和文件簇链.能对硬盘进行不同 ...
- lua学习笔记(二)
开始 程序块chunk 交互模式里输入的一行代 一个文件里的代码 也就是一连串的语句或命令 连续的lua语句之间不需要分隔符,但也可以使用分号,如果你愿意的话 ...
- which 命令
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. ...
- Arbitrage - poj 2240 (Bellman-ford)
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17374 Accepted: 7312 Description Ar ...
- run ceph in docker
申明:基本安装是依照http://dockone.io/article/436来进行的,但原文中ceph集群的搭建不够完整.我这里会做一些补充及说明. 1. 下载mon和osd镜像 [root@u ...
- ubuntu 查看服务列表
查看服务列表代码 sudo service --status-allsudo initctl list from: http://zhidao.baidu.com/link?url=hLMXGocC2 ...
- phpstudy配置php7.1.11 + phpstudy nginx伪静态
切记要把新的php版本配到环境变量,cmd才会生效 php7.1.11下载地址 http://windows.php.net/download/ 下载之后,解压. 重名的为php-7.1.11-nts ...
- 调整虚拟机中Linux的分辨率
1 在虚拟机配置中,将显示的缓存提高,CPU也提高. 2 运行Linux,在system-preferences-display中调整分辨率
- 安卓编译出错: Process 'command 'C:\Java\jdk1.8.0_51\bin\java.exe'' finished with non-zero exit value 1 解决!
安卓编译出错: Process 'command 'C:\Java\jdk1.8.0_51\bin\java.exe'' finished with non-zero exit value 1 解决! ...
- 九度OJ 1352:和为S的两个数字 (查找)
时间限制:2 秒 内存限制:32 兆 特殊判题:否 提交:3160 解决:833 题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输 ...