匿名函数是实现命令模式的好方法吗?

时间:2009-06-15 10:45:06

标签: design-patterns command-pattern

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

3 个答案:

答案 0 :(得分:5)

如果你有lambdas,你根本不需要一半“设计”“模式”。

厂?这只是一个返回新对象的函数。游客?咄!命令?匿名功能。翻译吗?需要字符串或其他功能。战略?这是一个功能!

那只是lambdas,函数和闭包。

The problem is, about 1/3 to 1/2 of them were basically cover-ups for deficiencies in C++ that don't exist in other languages. Although I'm not a huge Perl fan anymore, I have to admit the Perl community caught on to this first (or at least funniest). They pointed out that many of these so-called patterns were actually an implementation of Functional Programming in C++.

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

我会说不,基于一个函数无法真正封装命令的细节,如果它是匿名的,调用者和被调用者如何理解它代表什么?

(如果一个人想要迂腐,那么Copmmand模式的GoF描述专门描述了使用一个对象进行封闭,预先设置了一个基于函数的实现,虽然那将是挑剔)。