目的:将命令设计成类的形式,并可以组织成队列

优点:

  • 在需要的情况下,可以比较容易地将命令记入日志
  • 可以容易的实现对请求的撤销和重做
  • 由于新的具体命令类不影响其他的命令类,因此增加新的具体命令类很容易

例子:

class Receiver
{
public:
void action()
{
cout << "do action." << endl;
}
};
class Icommand
{
public:
virtual void excute() = 0;
}; class CommondFirst: public Icommand
{
Receiver* receive;
public:
CommondFirst(Receiver* receive)
{
this->receive = receive;
} void excute()
{
cout << "CommondFirst: " << endl;
receive->action();
}
}; class CommondSecond: public Icommand
{
Receiver* receive;
public:
CommondSecond(Receiver* receive)
{
this->receive = receive;
} void excute()
{
cout << "CommondSecond: " << endl;
receive->action();
}
};
class Invoker
{
vector<Icommand*> v;
public: void addCommand(Icommand* c)
{
v.push_back(c);
} void clear()
{
v.clear();
} void Notify()
{
for(vector<Icommand*>::iterator it=v.begin(); it!=v.end(); ++it)
{
(*it)->excute();
}
}
};
int main()
{
Receiver* r = new Receiver();
CommondFirst* cf = new CommondFirst(r);
CommondSecond* cs = new CommondSecond(r); Invoker* invoker = new Invoker();
invoker->addCommand(cf);
invoker->addCommand(cs);
invoker->Notify(); return 0;
}

设计模式:command模式的更多相关文章

  1. java设计模式-Command模式

    1.背景: 站在MM的角度,想命令追求者Boy干什么就干什么,而且将来还可以扩展,怎么做?   2.代码: Command.java: package com.cy.dp.command; publi ...

  2. 开发设计模式(一)Command模式

    Command定义 将来自客户端的请求传入一个对象,无需了解这个请求激活的 动作或有关接受这个请求的处理细节. 这是一种两台机器之间通讯联系性质的模式,类似传统过程语 言的 CallBack功能. 优 ...

  3. 设计模式--命令模式(Command)

    基本概念:  Command模式也叫命令模式 ,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数,命令模式将方法调用给封装起来了. 命令模式的 ...

  4. Java设计模式(22)命令模式(Command模式)

    Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...

  5. Command模式(命令设计模式)

    Command?? 把方法的调用用一个类的实例来承载,要管理工作的历史记录,创建这些方法执行的命令的集合,只需管理这些实例的集合即可,而且还可以随时再次执行过去的命令,或是将多个过去的命令整合为一个新 ...

  6. C++设计模式-Command命令模式

    Command命令模式作用:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 由于“行为请求者”与“行为实现者”的紧耦合,使用命令模式 ...

  7. 设计模式(二十二)Command模式

    一个类在进行工作时会调用自己或者是其他类的方法,虽然调用结果会反映在对象的状态中,但并不会留下工作的历史记录. 这时,如果我们有一个类,用来表示“请进行这项工作”的“命令”就会方便很多.每一项想做的工 ...

  8. C++设计模式 - 命令模式(Command)

    行为变化模式 在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化."行为变化" 模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合. 典型模 ...

  9. C++基础——模拟事务 (1)COMMAND模式

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  10. [Head First设计模式]餐馆中的设计模式——命令模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

随机推荐

  1. JavaScript图形实例:图形放大镜效果

    1. 基本四瓣花型图案 根据四瓣花卉线的参数方程: t= r*(1+sin(12*θ)/5)*(0.5+sin(4*θ)/2); x=t*cos(θ)); y=t*sin(θ)); 编写如下的HTML ...

  2. 入门大数据---MapReduce-API操作

    一.环境 Hadoop部署环境: Centos3.10.0-327.el7.x86_64 Hadoop2.6.5 Java1.8.0_221 代码运行环境: Windows 10 Hadoop 2.6 ...

  3. Validate日期校验

    public class Validate { private static Regex RegNumber = new Regex("^[0-9]+$"); private st ...

  4. GitLab Runner部署(kubernetes环境)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. caffe训练数据流程

    cifar10训练实例 1. 下载数据 # sudo sh data/cifar10/get_cifar10.sh 2. 转换数据格式为lmdb # sudo sh examples/cifar10/ ...

  6. python利用列表文件遍历

    关键词:文件遍历/列表 思路:先制作目标文件列表(txt/csv...均可),再逐行读取列表文件 1. 制作列表 linux 终端输入:# find ./abc -type f > list.t ...

  7. egret Exml自定义组件

    有个需求,在A组件里面包裹 B组件: 碰到了一些奇怪的问题,这些问题是由于编辑器bug引起的.创建了皮肤后并没有在default.thm.json直接添加进去,造成拖动组件莫名其妙的bug,这里忘记保 ...

  8. python之浅谈计算机基础

    目录 一.计算机基础之编程 什么是编程语言 什么是编程 为什么要编程 二.计算机组成原理 1. 计算机五大组成 CPU 存储器 输入设备 输出设备 2.计算机五大部分补充 CPU相关 应用程序启动流程 ...

  9. 资深阿里程序员一一为你解刨Web前端知识体系结构,付出与收获成正比!

    只要接触过前端,都会指导web前端的知识主要由三部分组成:分别为静态html,样式css,动态javascript(简称js)这三大部分组成.其三部分组成的一个体系的复杂程度不亚于其他一门技术的复杂程 ...

  10. 命令 关闭SElinux

    # sed -i 's/^SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config