1

私はこのパターンにかなり慣れていません...

4

3 に答える 3

6

ラムダがあれば、「デザイン」「パターン」の半分はまったく必要ありません。

工場?これは、新しいオブジェクトを返す単なる関数です。ビジター?当たり前!指示?匿名関数。通訳者?文字列などを取る関数。ストラテジー?機能です!

それは単なるラムダ、関数、およびクロージャです。

問題は、それらの約 3 分の 1 から 2 分の 1 が基本的に、他の言語には存在しない C++ の欠陥の隠蔽でした。私はもう Perl の大ファンではありませんが、Perl コミュニティがこれに最初に (または少なくとも最も面白い) 注目したことを認めなければなりません。彼らは、これらのいわゆるパターンの多くが、実際には C++ での関数型プログラミングの実装であると指摘しました。

そうです、コマンド パターンを使用する場所で匿名 (または別の方法で名前を付けた) 関数を使用できます。

于 2009-06-15T10:46:24.127 に答える
3

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

ただし、各コマンドに複数の操作があることは珍しくありません。たとえば、元に戻す/やり直し処理のための DoCommand/UndoCommand です。または、CanExecuteCommand/ExecuteCommand を使用して、コマンドの UI 機能を有効/無効にします。または GetLocalizedCommandName のようなもの。私はこれらの場合にインターフェイスを使用します (たとえば、無名関数のタプルの代わりに)。

于 2009-06-15T10:52:44.707 に答える
0

関数はコマンドの詳細を実際にカプセル化することはできず、匿名の場合、呼び出し元と呼び出し先の両方がそれが何を表しているかをどのように理解できるのでしょうか?

(詳しく知りたい場合は、Copmmand パターンの GoF 記述で、オブジェクトを使用してカプセル化を行うことを具体的に説明し、関数ベースの実装を除外しますが、それは些細なことですが)。

于 2009-06-15T10:48:01.050 に答える