コマンドモード
コマンドモード(コマンド・パターン)は、モデルのタイプに属し、データ駆動型デザインパターンです。 Requestオブジェクト内のパッケージの形でコマンド、および呼び出し元のオブジェクトに渡されました。 探し呼び出しオブジェクトは、適切なコマンド・オブジェクトを処理することができ、コマンドは、コマンドを実行し、適切なオブジェクトに渡されます。
入門
意図:あなたはクライアントをパラメータ化するために異なる要求を使用できるように、オブジェクトとして要求をカプセル化します。
主に解決するために:ソフトウェアシステムでは、要求者と行動の挙動は通常、密結合の関係を達成するため、そのような取り消しややり直し、記録を行う必要、およびその他のトランザクション処理、この魅力的なようないくつかの状況で、密結合設計変更適切ではありません。
ときに使用する:このような"レコード、アンドゥ/リドゥ、取引"と他の治療の挙動についてのいくつかの例では、このような変化は、密結合が不適切で抵抗することはできません。この場合、どのように「行為の依頼者」と「行動の実装者は、「デカップリングのだろうか? 抽象オブジェクトのセット、疎結合として作用は、二つの間で達成することができます。
修正方法:発信者を呼び出すために受信者によって実行して、順番に:発信者、受信機→→コマンド。
キーコード:3つの役割の定義:1は、コマンド入力を使用して、実際のコマンド実行オブジェクト2、コマンド3、呼び出し元のオブジェクトを受け取りました
応用例:クラスモデル層は、など、さまざまなアプリケーションが異なるモデル・クラス、具体的なコマンドと同等のものを持っているだろうしながら、動作中のストラット1コアコントローラのActionServletは、一つだけ、起動側の等価です。
利点:1は、システムは、結合の程度を減少させます。2、新しいコマンドが容易にシステムに追加することができます。
短所:コマンド・モードでは、いくつかのシステムがあまりにも多くの特定のコマンドクラスを持っている恐れがあります。
使用シナリオ:各ボタンは、コマンドで、1 GUIを:ローカルコマンドのような、コマンドモードを使用することができます。2は、CMDをシミュレートしました。
注:システムは、コマンド・モードを使用して検討することができ、コマンドのUNDO(元に戻す)とリカバリ操作(やり直し)操作をサポートする必要があり、拡張コマンドモードを参照してください。
実現
我々は最初に注文してから、要求ストッククラスを作成するためのコマンド・インタフェースとして作成しました。 エンティティおよびコマンドクラスBuyStockSellStock、注文がインタフェースを実装し、それが実際のコマンド処理を実行します。 注文と注文を受け付けることができ、コール・オブジェクト・クラスのブローカーとして作成。
どのコマンドが実行するためにどのオブジェクトを決定するには、コマンドの種類に基づいて、コマンドモードを使用して、ブローカー・オブジェクト。 CommandPatternDemo、コマンドモードを示すために、 ブローカクラスを使用して私たちのデモクラス。
ステップ1
コマンド・インタフェースを作成します。
Order.java
パブリックインターフェイス注文{ ()を実行無効。 }
ステップ2
リクエストクラスを作成します。
Stock.java
パブリッククラスストック{ プライベート文字列名= "ABC"; プライベートint型の量= 10; 公共ボイド買い(){ System.out.println( "ストック[名:" +名+」、 数量: "+数量+"]は)」を買いました。 } 公共ボイド売り(){ System.out.println( "ストック[名:" +名+」、 数量: "+数量+"]販売 "); } }
ステップ3
ご注文は、インターフェイスを実装するエンティティクラスを作成します。
BuyStock.java
パブリッククラスBuyStockは{注文を実装します プライベートストックabcStock。 公共BuyStock(証券abcStock){ this.abcStock = abcStock。 } 公共ボイド(実行){ abcStock.buy()。 } }
SellStock.java
パブリッククラスSellStockは{注文を実装します プライベートストックabcStock。 公共SellStock(証券abcStock){ this.abcStock = abcStock。 } 公共ボイド(実行){ abcStock.sell()。 } }
ステップ4
コマンドの呼び出しクラスを作成します。
Broker.java
輸入はjava.util.ArrayList; 輸入java.util.Listに。 パブリッククラスブローカー{ プライベートリスト<注文>オーダーリスト=新しいのArrayList <注文>(); 公共ボイドtakeOrder(受注オーダー){ orderList.add(オーダー)。 } 公共ボイドplaceOrders(){ 用(受注オーダー:オーダーリスト){ order.execute()。 } orderList.clear()。 } }
ステップ5
受け入れ、コマンドを実行するためにブローカーのクラスを使用します。
CommandPatternDemo.java
パブリッククラスCommandPatternDemo { 公共の静的な無効メイン(文字列[] args){ ストックabcStock =新株式(); BuyStock buyStockOrder =新しいBuyStock(abcStock)。 SellStock sellStockOrder =新しいSellStock(abcStock)。 ブローカーブローカー=新しいブローカー(); broker.takeOrder(buyStockOrder)。 broker.takeOrder(sellStockOrder)。 broker.placeOrders()。 } }
ステップ6
出力を確認します。
買った証券[10名前:ABC、数量] 株価は[名:ABC、数量:10]販売します