前言

在GOF设计模式书中提及,Comand模式的意图是将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

GOF中列举了该模式的四种适用性:
1. 在不同时刻指定、排列和执行请求;(有栗子)
2. 支持取消操作;(慢慢体会)
3. 支持修改日志;(慢慢体会)
4. 用构建在原语操作上的高层操作构造一个系统。(慢慢体会)

扯淡由此开始

由一个小程序说起,用过CTP API的应该知道,CTP交易系统服务端对API的查询频率有限制,就是每一秒最多只能查询一次,前言Comand模式适用性的第一种说的就是这种情况,跟该模式定义也相当吻合。由此,可以将API向服务器发送的每一个请求封装成一个个对象,然后放进队列中,一秒钟发送一个请求。客户端发送请求时,完全不用担心会超出CTP交易系统的限制,只需将请求放入队列。
## 举个栗子,伪代码##

class Command;+ virtual execute() = 0;
Class CommandQryOrder; //查询委托+ execute(){api->reqQryOrder();}
class CommandQryPosition; //查询持仓+ execute(){api->reqQryPosition();}
class CommandManager;  //请求管理- mMsgQueue+ addCommand(Command* c)+ run(){while(1) Command* c = mMsgQueue.pop(); c->execute(); sleep(1s);//每秒发送一个命令}

在实际业务中调用时,只需要向CommandManager中添加命令即可。

结束扯淡

这是自己改版过的Command模式,只是借鉴了其中一点,按照GOF设计模式中所讲的,完整的命令模式参与者应该涉及Command、ConcreteCommand、Client、Invoker、Reciever。
仔细分解一下:
Command:声明操作接口
ConcreteCommand:绑定具体动作,栗子中CommandQryOrder、CommandQryPosition
Client:请求发起者,这个好理解
Invoker:这个类似CommandManager,存储命令对象,并且要求命令对象执行请求
Reciever:栗子中并没有很明确的体现,但是Client直接操作CommandManager,可以说CommandManager也是Reciver

我所理解的设计模式——对象行为之命令(Comand)模式相关推荐

  1. 我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)

    概述: 每个人都要"交个人所得税",但是"在美国交个人所得税"和"在中国交个人所得税"就有不同的算税方法. 而策略模式就是对算法进行包装,是 ...

  2. 代理对象我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)

    文章结束给大家来个程序员笑话:[M] 概述 作为C++工程师,免不了要管理内存,内存管理也是C++中的难点,而智能指针采用引用计数的方法很方便的帮我们管理了内存的应用,极大方便了我们的任务效率.而智能 ...

  3. 我所理解的设计模式(C++实现)——建造者模式(Builder Pattern)

    解决的问题: 我创建的这个对象比较复杂,且该对象里面的成员函数用不同的实现来表示不同的实例,换句话说就是同样的对象构建过程可以有不同的表示.比如我那天去吃过桥米线,他们有不同的套餐,套餐里包含的种类是 ...

  4. 我所理解的设计模式(C++实现)—— “一句话总结”和索引

    我所理解的设计模式系列已经全部完成,在写该系列的过程中收获很多.俗话说得好,好记性不如烂笔头,写出来不单单可以增加自己对知识的理解,也可以很好的分享给大家,大家共同学习.这里是最后一篇,来给所有的设计 ...

  5. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

  6. 完全理解 Python 迭代对象、迭代器、生成器(转)

    完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...

  7. 如何定义一个类对象并用next()的方法使用_深入理解-可迭代对象、迭代器(20个为什么)...

    2019-06-16 深入理解可迭代对象.迭代器 什么是迭代器模式? 当扫描内存中放不下的数据集时,要找到惰性获取数据项的方式,即按需一次获取一个数据项,这就是迭代器模式 迭代器构成? python没 ...

  8. java装饰模式理解_Java设计模式之装饰模式趣谈

    JVM:"上次给我招的工人不错啊!" oo程序员:"---.." JVM:"现在来我开的博物馆生意越来越好了,原来"舞台剧"的方式 ...

  9. DirectX12(D3D12)基础教程(四)——初识DirectXMath库、使用独立堆创建常量缓冲、理解管线状态对象、理解围栏同步

    目录 1.前言及本章内容提要 2.初识DirectXMath库 3.使用独立堆创建常量缓冲 4.理解管线状态对象 5.理解围栏同步 6.完整代码 1.前言及本章内容提要 经过了之前3篇教程的跨度有点大 ...

最新文章

  1. MyBatis开发步骤
  2. 作业调度问题java代码_Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码...
  3. Kubernetes 1.20 发布:妙啊
  4. 《大数据》杂志——大数据技术发展的十个前沿方向(中)
  5. 在.NET单元测试中使用嵌入式资源
  6. sql处理null值
  7. STM32智能小车------红外遥控
  8. html转word设置一二三级标题,word怎么设置一二三级标题
  9. 一台服务器​最大并发 tcp 连接数多少?65535?
  10. 计算机专业保研面试备考:高等数学
  11. Learning Transferable Features with Deep Adaptation Networks
  12. 电脑时间不准怎么办?电脑时间不准怎么修复?
  13. Unity Timeline自定义轨道
  14. 宁波银行成长的AB面:增长与合规不可兼得?管理漏洞不容忽视
  15. Mac升级python3版本
  16. 执行 taro init myApp 报错 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\taro.ps1
  17. 军品研制过程评审活动-(一)论证阶段
  18. bcm54xx系列phy光口电口的配置方法
  19. 加速度随机游走_VIO学习之公式推导——IMU篇
  20. solr教程,值得刚接触搜索开发人员一看(转载:http://blog.csdn.net/awj3584/article/details/16963525)

热门文章

  1. burp Fiddler抓包软件
  2. 【Android数据存储】ContentProvider详细介绍(附实例源码)
  3. Unity5.3官方VR教程-系列1
  4. 外科医生就是男性?算法为何也有性别歧视
  5. 【精华】PMP认证最全介绍!
  6. Phase机制讲解(IC验证面试)
  7. 用python让excel飞起来 pdf_科大讯飞又出黑科技!造了个鼠标,既会打字又懂翻译...
  8. Mbed 6.2 无法打印浮点数的解决方法
  9. 惠普大中华区总裁孙振耀退休感言
  10. 浅谈对美国主机进行空间设计的方法