クライアントからオブジェクトにリクエストを渡し、異なるリクエストでクライアントをパラメーター化できるようにします。 「行動要求者」と「動作実装者」を切り離すために使用されるには、変化に適応するために2つの間のゆるい結合を実現できます。変化する不変の要因を分離します。
1。役割
指示
コマンドのインターフェイスを定義し、実行方法を宣言します。
コンクリートコマンド
コマンドインターフェイス実装オブジェクトは、「仮想」実装です。通常、レシーバーを保持し、受信機の関数を呼び出してコマンドによって実行される操作を完了します。
受信機
レシーバー、コマンドを真に実行するオブジェクト。コマンドが必要とする対応する関数を実装できる限り、クラスは受信機になる場合があります。
招待者
コマンドオブジェクトはリクエストを実行する必要があり、通常はコマンドオブジェクトを保持し、多くのコマンドオブジェクトを保持できます。これは、クライアントが実際にコマンドをトリガーし、コマンドが対応する操作を実行するために要求する場所です。つまり、コマンドオブジェクトのエントリを使用するのと同等です。
クライアント
特定のコマンドオブジェクトを作成し、コマンドオブジェクトの受信機を設定します。これは私たちの従来の意味でのクライアントではなく、コマンドオブジェクトとレシーバーを組み立てていることに注意してください。おそらく、コマンドトリガーを実際に使用するクライアントが招待者から実行された場合、このクライアントをアセンブラーと呼ぶ方が良いでしょう。
2。利点
3.短所<BR />コマンドモードを使用すると、一部のシステムが特定のコマンドクラスが多すぎる場合があります。各コマンドに特定のコマンドクラスが必要なため、一部のシステムでは、コマンドモードの使用に影響する多数の特定のコマンドクラスが必要になる場合があります。
IV。適用可能な状況
5。アプリケーション<BR />シミュレーションには、テレビの操作のためのパワーオン、シャットダウン、および変更インコマンドが含まれます。コードは次のとおりです
//コマンドパブリックインターフェイスコマンドを実行するためのインターフェイス{void execute(); } //コマンドレシーバー受信機パブリッククラスTV {public int currentchannel = 0; public void turnon(){system.out.println( "Televisinoがオンになっています。"); } public void turnoff(){system.out.println( "テレビはオフです。"); } public void changechannel(int channel){this.currentchannel = channel; System.out.println( "Now TVチャンネルIS" +チャンネル); }} //シャットダウンコマンドConcreTeCommand Public Class Commandon Commant Command {private tv mytv; Public Commandon(TV TV){mytv = TV; } public void execute(){mytv.turnon(); }} //シャットダウンコマンドConcreTeCommand Public Class CommandOff Command {private tv mytv; Public CommandOff(TV TV){mytv = TV; } public void execute(){mytv.turnoff(); }} //チャネルスイッチングコマンドConcreTeCommand public classCommandChange Commant Command {private TV mytv;プライベートINTチャンネル。 Public CommandChange(TV TV、int Channel){mytv = TV; this.channel = channel; } public void execute(){mytv.ChangeChannel(Channel); }} //リモートコントロールの招待者パブリッククラスコントロール{private command oncommand、offcommand、changeChannelと見なすことができます。パブリックコントロール(コマンドオン、コマンドオフ、コマンドチャネル){oncommand = on; offcommand = off; changechannel = channel; } public void turnon(){oncommand.execute(); } public void turnoff(){offcommand.execute(); } public void changechannel(){changechannel.execute(); }} //テストクラスクライアントパブリッククラスクライアント{public static void main(string [] args){//コマンド受信者レシーバーTV = new TV(); // Power-on Command ConcreTeCommond Commandon on = new Commandon(mytv); // Power-Off Command ConcreTeCommond CommandOff off = new CommandOff(mytv); // Channel SwitchingコマンドConcreTeCommond CommandChange Channel = new CommandChange(mytv、2); //コマンドコントロールオブジェクトInvoker Control = new Control(on、off、channel); // Power-on Control.Turnon(); // Channel Control.ChangeChannel()を切り替えます。 // control.turnoff(); }}実行結果
Televisinoがオンになっています。
現在、テレビチャンネルは2です
テレビはオフです。
6。概要
1.コマンドモードの本質は、コマンドをカプセル化し、コマンドを発行する責任とコマンドを実行する責任を分離することです。
2。各コマンドは操作です。要求当事者は要求を発行し、操作を実行する必要があります。受信者はリクエストを受け取り、操作を実行します。
3.コマンドモードにより、要求当事者が受信当事者から独立することを可能にするため、要求当事者は要求を受け取った当事者のインターフェースを知る必要がなく、要求がどのように受信されたか、いつ、どのように実行されたかを知る必要もありません。
4.コマンドモードにより、リクエスト自体がオブジェクトになり、他のオブジェクトのように保存および渡すことができます。
5.コマンドモードのキーは、抽象コマンドインターフェイスと、抽象コマンドインターフェイスの送信者プログラムを導入することです。抽象コマンドインターフェイスを実装する特定のコマンドのみをレシーバーに関連付けることができます。
上記は、Javaコマンドデザインパターンの詳細な紹介です。すべての人の学習に役立つことを願っています。