1

我对这种模式很陌生...

4

3 回答 3

6

如果你有 lambda,你真的不需要一半的“设计”“模式”。

工厂?这只是一个返回新对象的函数。游客?呸!命令?匿名函数。翻译?接受字符串或其他内容的函数。战略?这是一个功能!

那只是 lambdas、函数和闭包。

问题是,其中大约 1/3 到 1/2 基本上是为了掩盖 C++ 中不存在于其他语言中的缺陷。虽然我不再是 Perl 的忠实粉丝,但我不得不承认 Perl 社区首先抓住了这一点(或者至少是最有趣的)。他们指出,许多所谓的模式实际上是 C++ 中函数式编程的实现。

所以是的,您可以在使用命令模式的地方使用匿名(或以其他方式命名)函数。

于 2009-06-15T10:46:24.127 回答
3

如果您的命令仅支持一项操作,您可以安全地使用匿名函数。

但是,每个命令都有多个操作并不少见。例如 DoCommand/UndoCommand 用于撤销/重做处理。或 CanExecuteCommand/ExecuteCommand 启用/禁用命令的 UI 功能。或者像 GetLocalizedCommandName 这样的东西。在这些情况下,我会使用接口(而不是匿名函数的元组)。

于 2009-06-15T10:52:44.707 回答
0

我会说不,因为函数不能真正封装命令的细节,如果它是匿名的,调用者和被调用者如何理解它所代表的内容?

(如果想学究气,GoF 对 Copmmand 模式的描述专门描述了使用对象进行封装,排除了基于函数的实现,尽管那会是挑剔的)。

于 2009-06-15T10:48:01.050 回答