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

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

相关推荐
炸膛坦客30 分钟前
单片机/C/C++八股:(十九)栈和堆的区别?
c语言·开发语言·c++
零雲31 分钟前
java面试:了解抽象类与接口么?讲一讲它们的区别
java·开发语言·面试
Jay_Franklin1 小时前
Quarto与Python集成使用
开发语言·python·markdown
2401_831824961 小时前
代码性能剖析工具
开发语言·c++·算法
是wzoi的一名用户啊~1 小时前
【C++小游戏】2048
开发语言·c++
Sunshine for you2 小时前
C++中的职责链模式实战
开发语言·c++·算法
@我漫长的孤独流浪2 小时前
Python编程核心知识点速览
开发语言·数据库·python
qq_416018722 小时前
C++中的状态模式
开发语言·c++·算法
2401_884563242 小时前
模板代码生成工具
开发语言·c++·算法
code 小楊3 小时前
yrb 1.5.0 正式发布:Python 极简国内下载加速与全景可视化终端体验!
开发语言·python