私はこのパターンにかなり慣れていません...
3 に答える
ラムダがあれば、「デザイン」「パターン」の半分はまったく必要ありません。
工場?これは、新しいオブジェクトを返す単なる関数です。ビジター?当たり前!指示?匿名関数。通訳者?文字列などを取る関数。ストラテジー?機能です!
それは単なるラムダ、関数、およびクロージャです。
そうです、コマンド パターンを使用する場所で匿名 (または別の方法で名前を付けた) 関数を使用できます。
コマンドが 1 つの操作のみをサポートする場合は、無名関数を安全に使用できます。
ただし、各コマンドに複数の操作があることは珍しくありません。たとえば、元に戻す/やり直し処理のための DoCommand/UndoCommand です。または、CanExecuteCommand/ExecuteCommand を使用して、コマンドの UI 機能を有効/無効にします。または GetLocalizedCommandName のようなもの。私はこれらの場合にインターフェイスを使用します (たとえば、無名関数のタプルの代わりに)。
関数はコマンドの詳細を実際にカプセル化することはできず、匿名の場合、呼び出し元と呼び出し先の両方がそれが何を表しているかをどのように理解できるのでしょうか?
(詳しく知りたい場合は、Copmmand パターンの GoF 記述で、オブジェクトを使用してカプセル化を行うことを具体的に説明し、関数ベースの実装を除外しますが、それは些細なことですが)。