2009-06-15 11 views

答えて

5

ラムダを持っていれば、本当に "デザイン"の "パターン"の半分を完全に必要としません。

工場?それは単なる新しいオブジェクトを返す関数です。ビジター?ダー!コマンド?無名関数。通訳?文字列などを取る関数。戦略?それは関数です!

これは単なるラムダ、関数、クロージャです。

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

関数は実際にはコマンドの詳細をカプセル化できないということを基にして、noと言うでしょうし、匿名の場合、呼び出し元と呼び出し先の両方がその表現を理解する方法はありますか?

(CopymandパターンのGoF記述は、関数をベースにしたimplenetationを前提にして、暗号化を行うためのオブジェクトの使用を具体的に記述しています。

+0

それをもっと詳しく説明できますか?カプセル化できない詳細はどれですか? – Iain

2

コマンドが1つの操作しかサポートしていない場合は、無名関数を安全に使用できます。

ただし、コマンドごとに複数の操作を行うことは珍しいことではありません。例えば。取り消し/やり直し処理のためのDoCommand/UndoCommand。またはCanExecuteCommand/ExecuteCommandを使用して、コマンドのUI機能を有効または無効にします。またはGetLocalizedCommandNameのようなものです。これらのケースでは(例えば、匿名関数の組ではなく)インターフェースを使用します。

関連する問題