同じパターンの名前として、異なる操作のパターンが異なるコマンドとして実行することができ、あなたがキューを使用して一連のコマンドを実行できるコマンドモード、あなただけでは、コマンドを実行することができます。操作キーのこのモードは、別のコマンドオブジェクトパッケージ、デカップリングを使用して操作を行い、発信者のために異なっています。
コマンドオブジェクト(すなわち、命令、またはコマンドオブジェクトのそれぞれ)情報の全てをカプセル化するためのコマンド・モードは、この操作の目的を完了する必要があり、オブジェクトのメソッドを含む、トリガイベント時の動作または完了するために必要と処理に必要なパラメータ、すなわち、コマンドオブジェクトは、特定の良好な動作のために必要なすべての情報をカプセル化し、それだけで「順」のインプリメンテーション、実行対応する方法、すなわち、使用することができる呼び出す必要があります。それはより多くのコマンドは、いくつかの異なる操作の代わりに、コマンドオブジェクトを作成することができので、通常我々は、複数のコマンドを使用します。
コマンドモードの3つの役割:
- コマンド:コマンドは、異なるコマンドを作成するために使用されるカプセル化、特定の操作をオブジェクト。
- レシーバ:パラメータ受容体、すなわち、特定の操作を行うことにより。
- 実行者:別のコマンドオブジェクト(キューのすなわちコマンド・クリエーター)を呼び出すために、このオブジェクトをコマンドオブジェクトを呼び出します。
コマンドモードコアのアイデア:
- これは、オブジェクトに対する要求を(すなわち、コマンドオブジェクトは、コマンドをカプセル化)カプセル化します。
- 異なるパラメータを使用してクライアントの要求に(パラメータ値は、操作に応じて、異なるコマンドを通過しました)。
- キューに格納されている要求を許可します。
- オブジェクト指向のコールバックを提供します。
コマンドモードの利点:
- 呼び出し側の実行とデカップリング操作、仲介者としてブローカーにCommandオブジェクトを使用して。
- あなたは一連のコマンドを作成し、管理するためには、キューを使用することができます。
- 新しいコマンドが容易で、既存のコードを変更する必要はありません追加します。
- あなたがREDOまたはロールバック操作だけでなく、非同期タスクを達成するためのコマンドモードを使用することができ、ちょうど対応するコマンドを実行する必要があります。
コマンドモードの短所:
- コマンドモードは、お互いに協力してクラスとオブジェクトの多くを作成する必要があり、その実装と保守の複雑さを増すことがあります。
- 各コマンドは、コマンド・クラスであるため、あなたはあまり注文した場合ので、それがさらにトラブルを達成し、維持します。
簡単な例:
ABC インポートABCMeta、AbstractMethod クラス:レシーバー 「」「受信機:別の操作を実行するための様々な方法の定義」「」 DEF アクション1(セルフ): 印刷(「アクション1を実行... 」) DEF アクション2(セルフ): 印刷(「アクション2を実行... 」) クラスコマンド(つまり=メタクラスABCMeta): 「」「コマンドオブジェクトインターフェイス:コマンド実行方法は統一定義された」「」 @abstractmethod DEF :(自己)実行 パス クラスアクション1(コマンド): 「」」コマンド1:操作アクション1を実行するための"" " DEF __init__ (セルフ、レシーバ): self.receiver = レシーバ DEF 実行(自己): self.receiver.action1() クラスアクション2(コマンド): " "" コマンド2:アクション2の操作を実行する「「」 DEF __init__ :(セルフ、レシーバー) self.receiver = レシーバ DEF (セルフ)を実行します。 self.receiver.action2() クラスの発動: 」「」コマンドキューを作成し、呼び出しとコマンドキューを実行します"" " DEF __init__ (セルフ): セルフ。アクション= [] DEF append_action(自己、アクション): self.actions.append(アクション) DEF execute_actions(自己) のためにアクションでself.actions: action.execute() もし __name__ == ' __main__ ' : 受信 = レシーバ() アクション1 = アクション1 (受信機) アクション2 = アクション2(受信機) 呼び出し = インボーカ() invoker.append_action(アクション1) invoker.append_action(アクション2) invoker.execute_actions()