c++泛型编程之泛化仿函数

command设计模式

command模式的目的是为了将请求封装在对象内,command对象是一个与其实际执行者分开存储的工件。基本结构如图所示:

这个设计模式的主要部件是Command类本身,其最重要的目的是降低Invoker(请求者)和Receiver(接收者)之间的依赖性。

  1. 应用程序产生一个ConcreteCommand对象,并传给它足够的信息来执行任务;
  2. 应用程序将ConcreteCommand对象中的Command接口传给invoker,由它保存这个接口。
  3. 此后,一旦调用者认为执行时间到了,便会启动Command中的Execute虚函数。虚拟调用机制会把这个动作发送给ConcreteCommand对象,由后者处理细节。ConcreteCommand找到Receiver对象,并通过该对象进行实际处理。另一种情况由ConcreteCommand全权处理,此时Receiver将不复存在。

Command模式有两个重要的特性:

  • 接口分离。invoker和receiver分离;
  • 时间分离 。Command保存了一个整装待发的处理请求,供将来使用。

从实作角度来看,我们可以划分为两类ConcreteCommand,一类仅仅将工作委托为receiver,它们所做的事情只是对着一个Receiver对象调用某个成员函数。这种称为转发式命令。另一类完成更复杂的工作,它们会调用其他对象的成员函数,也会嵌入一些单纯转发之外的逻辑,这种称为主动式命令。

主动式命令无法加以灌装,它们的代码必然与应用程序有所关联。但我们可以为转发式命令开发辅助工具,我们称之为泛化仿函数。

相关推荐
库玛西1 小时前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
Chester_19997 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲8 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员9 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导9 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan9 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子9 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化9 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_695251499 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
大衛說10 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习