我所理解的设计模式——对象行为之命令(Comand)模式
前言
在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)模式相关推荐
- 我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)
概述: 每个人都要"交个人所得税",但是"在美国交个人所得税"和"在中国交个人所得税"就有不同的算税方法. 而策略模式就是对算法进行包装,是 ...
- 代理对象我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)
文章结束给大家来个程序员笑话:[M] 概述 作为C++工程师,免不了要管理内存,内存管理也是C++中的难点,而智能指针采用引用计数的方法很方便的帮我们管理了内存的应用,极大方便了我们的任务效率.而智能 ...
- 我所理解的设计模式(C++实现)——建造者模式(Builder Pattern)
解决的问题: 我创建的这个对象比较复杂,且该对象里面的成员函数用不同的实现来表示不同的实例,换句话说就是同样的对象构建过程可以有不同的表示.比如我那天去吃过桥米线,他们有不同的套餐,套餐里包含的种类是 ...
- 我所理解的设计模式(C++实现)—— “一句话总结”和索引
我所理解的设计模式系列已经全部完成,在写该系列的过程中收获很多.俗话说得好,好记性不如烂笔头,写出来不单单可以增加自己对知识的理解,也可以很好的分享给大家,大家共同学习.这里是最后一篇,来给所有的设计 ...
- java设计模式 建造模式_理解java设计模式之建造者模式
理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...
- 完全理解 Python 迭代对象、迭代器、生成器(转)
完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...
- 如何定义一个类对象并用next()的方法使用_深入理解-可迭代对象、迭代器(20个为什么)...
2019-06-16 深入理解可迭代对象.迭代器 什么是迭代器模式? 当扫描内存中放不下的数据集时,要找到惰性获取数据项的方式,即按需一次获取一个数据项,这就是迭代器模式 迭代器构成? python没 ...
- java装饰模式理解_Java设计模式之装饰模式趣谈
JVM:"上次给我招的工人不错啊!" oo程序员:"---.." JVM:"现在来我开的博物馆生意越来越好了,原来"舞台剧"的方式 ...
- DirectX12(D3D12)基础教程(四)——初识DirectXMath库、使用独立堆创建常量缓冲、理解管线状态对象、理解围栏同步
目录 1.前言及本章内容提要 2.初识DirectXMath库 3.使用独立堆创建常量缓冲 4.理解管线状态对象 5.理解围栏同步 6.完整代码 1.前言及本章内容提要 经过了之前3篇教程的跨度有点大 ...
最新文章
- MyBatis开发步骤
- 作业调度问题java代码_Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码...
- Kubernetes 1.20 发布:妙啊
- 《大数据》杂志——大数据技术发展的十个前沿方向(中)
- 在.NET单元测试中使用嵌入式资源
- sql处理null值
- STM32智能小车------红外遥控
- html转word设置一二三级标题,word怎么设置一二三级标题
- 一台服务器​最大并发 tcp 连接数多少?65535?
- 计算机专业保研面试备考:高等数学
- Learning Transferable Features with Deep Adaptation Networks
- 电脑时间不准怎么办?电脑时间不准怎么修复?
- Unity Timeline自定义轨道
- 宁波银行成长的AB面:增长与合规不可兼得?管理漏洞不容忽视
- Mac升级python3版本
- 执行 taro init myApp 报错 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\taro.ps1
- 军品研制过程评审活动-(一)论证阶段
- bcm54xx系列phy光口电口的配置方法
- 加速度随机游走_VIO学习之公式推导——IMU篇
- solr教程,值得刚接触搜索开发人员一看(转载:http://blog.csdn.net/awj3584/article/details/16963525)