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对象调用某个成员函数。这种称为转发式命令。另一类完成更复杂的工作,它们会调用其他对象的成员函数,也会嵌入一些单纯转发之外的逻辑,这种称为主动式命令。

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

相关推荐
王老师青少年编程3 分钟前
信奥赛C++提高组csp-s之搜索进阶(搜索剪枝案例实践1)
c++·csp·高频考点·信奥赛·提高组·搜索剪枝·小木棍
石山代码29 分钟前
ArrayList / HashMap / ConcurrentHashMap
java·开发语言
程序大视界1 小时前
【Python系列课程】Python正则表达式(下):环视、命名分组与日志实战
开发语言·python·正则表达式
枫叶v.1 小时前
Agent 分层存储架构设计:从记忆方法到中间件选型
开发语言·python
sleven fung3 小时前
MinerU与BabelDOC与KTransformers与OpenAI API库
开发语言·python·ai·langchain
萤萤七悬3 小时前
【Python笔记】AI帮实现CLI工具-使用argparse.ArgumentParser接收命令参数
开发语言·笔记·python
iCxhust3 小时前
C# 命令行指令 查看二进制文件
开发语言·单片机·嵌入式硬件·c#·proteus·微机原理·8088单板机
csdn_aspnet3 小时前
Java 霍尔分区算法(Hoare‘s Partition Algorithm)
java·开发语言·算法
王老师青少年编程3 小时前
信奥赛C++提高组csp-s之搜索进阶(搜索剪枝核心思想 )
c++·dfs·csp·信奥赛·搜索剪枝·搜索优化
一拳一个呆瓜3 小时前
【STL】使用 C++ 标准库标头
c++·stl