コマンドパターンについて最近読みました
このパターンは、「後でメソッドを呼び出すために必要なすべての情報を表現およびカプセル化する」ために使用されます。
C# デリゲートからの「メソッド呼び出し + ターゲット オブジェクトの詳細をカプセル化するオブジェクトの作成」の違いは何ですか? これらは両方とも同じ (または非常に類似した) 機能を提供していませんか?
コマンドパターンについて最近読みました
このパターンは、「後でメソッドを呼び出すために必要なすべての情報を表現およびカプセル化する」ために使用されます。
C# デリゲートからの「メソッド呼び出し + ターゲット オブジェクトの詳細をカプセル化するオブジェクトの作成」の違いは何ですか? これらは両方とも同じ (または非常に類似した) 機能を提供していませんか?
非常に似ていますが、その逆だと思います。
コマンドは、他の何かがターゲットデリゲートまたはオブジェクトを呼び出す場所です。イベントは、n個の加入者へのブロードキャストです。
もう1つの違いは、イベントの所有者がすべての異なるサブスクライバーについて知る必要がないことです。
WPFには、コマンドとイベントの両方があります。ボタンがあるとしましょう。Click
イベントをサブスクライブすることもCommand
、ボタンがクリックされたときに呼び出されるビューモデルを含めることもできます。
C# のイベントは、実際にはObserver Patternの実装です。
オブザーバーとコマンドの違いは、主に解決しようとしている問題にあります。コマンド パターンの目的は、アクションを実行する決定とその実行を分離することです。オブザーバー パターンのポイントは、オブザーバーの種類や数を知らなくても、あるいはオブザーバーが存在していなくても、関係者になんらかの出来事を通知することです。
つまり、イベント ハンドラーに置かれたデリゲートはコマンドです。ただし、これは実装の詳細であり、イベントのポイントではありません。オブザーバーの記事を読むと、
実際、このパターンに最もよく似ているC#機能は、イベントではなくデリゲートです...
はい、それは非常に似ていますが、コマンドパターンにより、より複雑なシナリオが可能になります(たとえば、元に戻る/やり直しの実装)