函子和命令模式之间有什么区别?

2022-09-03 16:40:26

我非常熟悉命令模式,但我还不了解函子和命令在理论上的区别。特别是,我正在考虑Java实现。两者基本上都是编程“动词”表示为对象。但是,在函子的情况下,正如我从一些示例中看到的那样,匿名内部类实现似乎很常见。有谁能为我很好地解决这个问题吗?


答案 1

函子是一种实现,是使对象表现得像函数的一种方式。

“命令模式”是一种设计模式。
函子是实现“命令模式”的一种方法。


答案 2

函子是一个“语法级别”概念 - 它将代码打包到一个对象中,该对象可以像函数指针一样在语法上处理 - 即可以通过将参数列表放在后面的括号中来“调用”。在C++中,您可以通过重写 operator() 使类成为函子。

命令模式中的 Command 是一个对象,它打包了一些可运行的功能,但不要求它是一个函子。例如,它可以是一个实现接口 ICommand 的类,允许通过调用 Do() 来运行其命令。