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

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

相关推荐
汉克老师37 分钟前
GESP2026年9月认证C++六级( 第三部分编程题(1、数组划分))精讲
c++·gesp·小学生·学c++编程
千里码aicood1 小时前
基于PLC与机器视觉的智能分拣控制系统设计
c++·自动化·plc
漂流瓶jz1 小时前
UVA-1442 洞穴 题解答案代码 算法竞赛入门经典第二版
c++·算法·题解·aoapc·算法竞赛入门经典·uva
朽棘不雕1 小时前
进一步了解模板
c++
Bruce_Liuxiaowei2 小时前
Python 实例赋值遮蔽类属性:一个从不报错的静默陷阱
开发语言·python·语法糖
aramae4 小时前
MySQL内置函数(7)
开发语言·笔记·后端·mysql·其他
汉克老师4 小时前
CSP-J 2026 初赛试题解析(第一部分:选择题(8-15))精讲
c++·csp-j·小学生·学c++编程
wabs6665 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
风合星语6 小时前
2026 ROS 2 Lyrical C++ 入门(五):Action 实战——任务反馈、取消与超时处理
c++·机器人·ros2·异步编程·lyrical
91刘仁德7 小时前
C++ 继承和多态 设计模式
c语言·c++·笔记