Я совершенно новый для этого рисунка ...Является ли анонимная функция хорошим способом реализации шаблона команды?
ответ
Если у вас есть лямбда, вам не нужна половина «шаблонов» дизайна.
Завод? Это просто функция, возвращающая новые объекты. Посетитель? Duh! Команда? Анонимная функция. Переводчик? Функция, которая принимает строку или что-то еще. Стратегия? Это функция!
Это просто лямбды, функции и затворы.
Так что да, вы можете использовать анонимный (или иначе), названные функции, где вы будете использовать шаблон Command.
Я бы сказал, нет, на основании того, что функция не может действительно инкапсулировать детали команды, и если она как анонимная, как и вызывающий, так и вызывающий могут понять, что она представляет?
(Если кто-то хотел быть педантичным, описание GoM в шаблоне Copmmand конкретно описывает использование объекта для выполнения инкубации, пресечение функции, основанной на имплантации, хотя это было бы nit-picking).
можете ли вы объяснить это более подробно? Какие детали невозможно инкапсулировать? – Iain
Если ваша команда поддерживает только одну операцию, вы можете безопасно использовать анонимную функцию.
Однако для каждой команды нередко бывает более одной операции. Например. DoCommand/UndoCommand для отмены/повторной обработки. Или CanExecuteCommand/ExecuteCommand для включения/отключения функций пользовательского интерфейса для этой команды. Или что-то вроде GetLocalizedCommandName. Я бы использовал интерфейс в этих случаях (вместо, например, кортежей анонимных функций).
В чем разница между лямбдой и анонимной функцией? – Iain
Они синонимы, я думаю. – alamar
Нет, есть небольшие отличия - http://blogs.msdn.com/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous-methods-part-one.aspx –