2009-06-15 9 views

ответ

5

Если у вас есть лямбда, вам не нужна половина «шаблонов» дизайна.

Завод? Это просто функция, возвращающая новые объекты. Посетитель? Duh! Команда? Анонимная функция. Переводчик? Функция, которая принимает строку или что-то еще. Стратегия? Это функция!

Это просто лямбды, функции и затворы.

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++.

Так что да, вы можете использовать анонимный (или иначе), названные функции, где вы будете использовать шаблон Command.

+0

В чем разница между лямбдой и анонимной функцией? – Iain

+0

Они синонимы, я думаю. – alamar

+0

Нет, есть небольшие отличия - http://blogs.msdn.com/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous-methods-part-one.aspx –

0

Я бы сказал, нет, на основании того, что функция не может действительно инкапсулировать детали команды, и если она как анонимная, как и вызывающий, так и вызывающий могут понять, что она представляет?

(Если кто-то хотел быть педантичным, описание GoM в шаблоне Copmmand конкретно описывает использование объекта для выполнения инкубации, пресечение функции, основанной на имплантации, хотя это было бы nit-picking).

+0

можете ли вы объяснить это более подробно? Какие детали невозможно инкапсулировать? – Iain

2

Если ваша команда поддерживает только одну операцию, вы можете безопасно использовать анонимную функцию.

Однако для каждой команды нередко бывает более одной операции. Например. DoCommand/UndoCommand для отмены/повторной обработки. Или CanExecuteCommand/ExecuteCommand для включения/отключения функций пользовательского интерфейса для этой команды. Или что-то вроде GetLocalizedCommandName. Я бы использовал интерфейс в этих случаях (вместо, например, кортежей анонимных функций).