ホームページ >バックエンド開発 >PHPチュートリアル >PHP デザイン パターン - コマンド パターン_PHP チュートリアル
コマンド パターン: ソフトウェア システムでは、通常、「動作要求者」と「動作実装者」は「密結合」を示します。しかし、「記録、元に戻す/やり直し、トランザクション」やその他の動作の処理など、状況によっては、変更に抵抗できないこの種の密結合は不適切です。この場合、「動作要求者」と「動作実装者」をどのように分離すればよいでしょうか?一連の動作をオブジェクトに抽象化し、オブジェクト間の疎結合を実現します。これがコマンドモードです。
クラス図:
性格分析:
抽象コマンド: コマンドのインターフェースを定義し、実行メソッドを宣言します。
特定のコマンド: コマンド インターフェイス実装オブジェクトは「仮想」実装であり、通常はレシーバーを保持し、コマンドによって実行される操作を完了するためにレシーバーの関数を呼び出します。
コマンドレシーバー: レシーバーは、コマンドを実際に実行するオブジェクトです。コマンドに必要な対応する機能を実装できる限り、どのクラスもレシーバーになることができます。
Controller: リクエストを実行するにはコマンド オブジェクトが必要で、通常はコマンド オブジェクトを保持し、多くのコマンド オブジェクトを保持できます。ここは、クライアントが実際にコマンドをトリガーし、対応する操作を実行するようコマンドに要求する場所であり、コマンド オブジェクトへの入り口に相当します。
コアコード:
リーリー
クライアントコードを呼び出す:
リーリー
該当するシナリオ:
1. システムは、発信者と受信者が直接対話しないように、リクエストの発信者とリクエストの受信者を分離する必要があります。
2. システムはリクエストを指定し、リクエストをキューに入れ、さまざまなタイミングでリクエストを実行する必要があります。
3. システムはコマンドの元に戻す (Undo) 操作と回復 (Redo) 操作をサポートする必要があります。
4. システムは一連の操作を組み合わせる必要があります。つまり、マクロ コマンドをサポートする必要があります。
メリット
1. オブジェクト間の結合を減らします。
2. 新しいコマンドをシステムに簡単に追加できます。
3. 組み合わせたコマンドの設計が容易になります。
4. 同じメソッドを呼び出して異なる関数を実装します