我对命令模式非常熟悉,但我还不了解Functor和命令之间的理论差异.特别是,我正在考虑Java实现.两者基本上都是编程"动词",表示为对象.但是,在仿函数的情况下,正如我从一些示例中看到的那样,匿名内部类实现似乎很常见.谁能在那里为我清楚地解决这个问题?
仿函数是一种实现,一种使对象表现得像函数的方法.
"命令模式"是一种设计模式.
仿函数是实现"命令模式"的一种方法.
仿函数是一种"语法级别"概念 - 它将代码打包在一个对象中,该对象可以在语法上像函数指针一样处理 - 即可以通过将参数列表放在其后的括号中来"调用"它.在C++中,您可以通过重写operator()使类成为仿函数.
命令模式中的命令是一个包含一些可运行功能的对象,但不要求它是一个仿函数.例如,它可以是实现接口ICommand的类,允许通过调用Do()来运行其命令.
以下是GOF的答案:
Coplien描述了如何在C++ [Cop92]中实现函数的函数对象.他通过重载函数调用操作符(operator())来实现其使用的一定程度的透明度.命令模式不同; 它的重点是保持接收器和功能(即动作)之间的绑定,而不仅仅是 维护功能.
从Apache Commons Functor页面的描述:
仿函数是可以作为对象操作的函数,或者是表示单个通用函数的对象.
Functors支持并鼓励一些强大的编程技术,包括:
以功能风格编程
高阶函数
内部迭代器
通过组合而不是继承和重载来重用和专门化
通用的"回调"或"扩展点"API
通用"过滤器"或谓词API
许多"行为"设计模式,如访客,战略,责任链等.