コマンド パターンは動作設計パターンを指します。
これは私が長い間こだわってきたパターンです。単純すぎて非常に複雑です。しかし、個人的には、独学の素晴らしさは、特定のトピックをあらゆる角度から研究するための時間をいつでも手に入れられることだと思います。
したがって、GoF では、適用可能性が非常に簡潔かつ明確に説明されています。
リクエストをオブジェクトとしてカプセル化し、さまざまなリクエストでクライアントをパラメータ化し、キューを使用し、リクエストをログに記録し、キャンセル操作を実行できるようにします。
次に、説明にあるコマンドの単純なバージョンを実装してみましょう。
string fakeTrumpsRequest = “SELECT * from Users where name beginsWith DonaldTrump”
リクエストは文字列クラス オブジェクトにカプセル化されており、クライアントの設定、キューへのコマンドの追加、ログ記録、キャンセル(「スナップショット」パターンを使用)に使用できます。
SQL クエリなどを実行するにはこれで十分だと思いますが、実装の詳細、さまざまなアプリケーション オプション、パターンのコード ベース、クライアント ロール、補助クラスも大きく異なります。
マテリアルパーツ
コマンド パターンは、単一の execute() メソッドを含む コマンド プロトコル で始まります。次に特定のコマンドとレシーバーが続きます。CC はレシーバー上で操作を実装し、レシーバーとアクションの間の接続を記述します。何か不明な点はありますか?私もそうですが、先に進みましょう。 クライアントは特定のコマンドのインスタンスを作成し、 それをレシーバーに関連付けます。 依頼者 – コマンドを起動するプロセスを実行するオブジェクト。
例を使用してそれを理解してみましょう。myPhone で myOS を更新したいとします。これを行うには、myOS_Update アプリケーションを起動します。その中で [Update Now] ボタンを押すと、10 秒後にシステムが更新されます。アップデートが成功したことを報告します。
上記の例のクライアント は myOS_Update! アプリケーション、呼び出し元 は「今すぐ更新!」ボタンで、特定のコマンド を起動します。 b>レシーバーにアクセスするexecute() メソッドを使用してシステムを更新します–オペレーティング システムのアップデート デーモン。
使用例
myOS_Update アプリケーションの UI を受け入れましょう。非常に優れていたため、他のオペレーティング システムを更新するためのインターフェイスを提供するために、別の製品として販売することにしました。この場合、ライブラリを介して拡張機能をサポートするアプリケーションを実装します。ライブラリには特定のコマンド、 レシーバーの実装があり、静的/不変の呼び出し元は残します。 、クライアント、プロトコルコマンド。
したがって、コードは変更されないままであるため、変更可能なコードをサポートする必要はありません。特定のコマンド のコード内のエラーにより、クライアント側で実装された場合にのみ問題が発生する可能性があります。 受信機。また、この実装では、メイン アプリケーションのソース コードを転送する必要はありません。つまり、コマンド パターンを使用してコマンドと UI インタラクションをカプセル化しました。
ソース
https://refactoring.guru/ru/design-patterns/command
https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612
