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

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

相关推荐
灰子学技术11 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
二十雨辰11 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码11 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚11 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂11 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas13611 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript
琹箐12 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
Monly2112 小时前
Java:修改打包配置文件
java·开发语言
我命由我1234513 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
island131413 小时前
CANN ops-nn 算子库深度解析:核心算子(如激活函数、归一化)的数值精度控制与内存高效实现
开发语言·人工智能·神经网络