モードコマンド(Commandパターン)は、モデルのタイプに属し、データ駆動型のデザインパターンです。被験体における介在物の形態、および呼び出し元に、オブジェクト内のコマンドを要求します。コマンドを処理することができます右のオブジェクトを見つけるために、オブジェクトを呼び出し、コマンドを実行し、適切なオブジェクトにコマンドを送信します。
意図:オブジェクトとして要求をカプセル化するので、あなたは異なる要求をクライアントにパラメータ化することができます。
主なソリューション:ソフトウェアシステム、行動と行動の要求元を達成するためには、通常、密結合の関係であるが、そのようなトランザクション処理など、取り消しまたはやり直し、記録を実施する必要性など、いくつかの状況では、これは抵抗することはできません密結合設計変更は適切ではありません。
ときに使用する:例えば、「レコード、アンドゥ/リドゥ、トランザクション」および他の処置の挙動のようないくつかのケースでは、そのような変更は、密結合が適切でない抵抗することはできません。この場合、どのように、「行動の実装者」デカップリング「要求者の行動」のだろうか?抽象オブジェクトのグループの挙動は、両者間の疎結合を達成することができます。
解決方法:このためには、呼び出すことによって、コマンドを実行するために、受信者を呼び出す:発信者、受信者→→コマンド。
キーコード: 3つの役割の定義:1は、実際のオブジェクト2、コマンド3、呼び出しコマンドオブジェクト入口を使用するコマンドを受信し
応用例:。Strutsは1コアコントローラのActionServlet一方のみ作用、等価インボーカ、およびモデルベースの層は、特定のコマンドに対応し、アプリケーションの異なるクラスと異なるモデルを有することができます。
利点: 1、システムは、結合の程度を減少させます。2、新しいコマンドを簡単にシステムに追加することができます。
短所:一部のシステムでは、あまりにも多くの特定のコマンドクラスを持っている可能性があり、コマンドモードを使用します。
使用シナリオ:各ボタンがコマンドで、1 GUIを:ローカルコマンドのような、コマンドモードを使用することができると思います。2、アナログCMD。
注意:システムがサポートするコマンド(元に戻す)とリカバリ操作(やり直し)操作を撤回する必要があり、あなたはまた、コマンドモードを使用することを検討して拡張コマンドモードを見ることができます。
Ordeer.java
パブリックインターフェースOrdeer {//コマンドインタフェース作成
ボイドは()を実行し;
}
Stock.java
パブリッククラスストック{//创建一个请求类
プライベート文字列名= "ABC";
プライベートint型の量= 10;
公共ボイド買い(){
System.out.printlnは( "証券[名:" +名+ "数量: "+数量+"]は買いました");
}
公共ボイド売り(){
System.out.printlnは( "ストック[名:" +名+ "数量:" +数量+ "]は、販売されています")。
}
}
BuyStock.java
パブリッククラスBuyStockはOrdeer {//オーダークラスがインターフェイスエンティティ実装作成実装し
、プライベートストックabcStockを
公衆buyStock(ストックabcStock){
; this.abcStock = abcStock
}
公共ボイドは(){実行
abcStock.buyを();
}
}
SellStock.java
パブリッククラスSellStockはOrdeer {実装
プライベート証券abcStockを。
公共SellStock(ストックabcStock){
this.abcStock = abcStock。
}
公共ボイドは(){実行
abcStock.sell()を。
}
}
Borker.java
輸入はjava.util.ArrayList;
輸入はjava.util.List;
パブリッククラスBorker {//创建命令调用类
プライベートリスト<Ordeer>オーダーリスト=新しいのArrayList <Ordeer>();
公共ボイドtakeOrder(Ordeer順序){
orderList.add(順序)
}
公共ボイドplaceOrdeers(){
用(Ordeer順序:オーダーリスト){
order.execute()。
}
orderList.clear()。
}
}
CommandPatternDemo.java
パブリッククラスCommandPatternDemo {并执行命令接受来类//使用ボーダー
のpublic static無効メイン(文字列[] args){
ストックabcStock =新しいストック()。
BuyStock buyStockOrder =新しいBuyStock(abcStock)。
SellStock sellStockOrder =新しいSellStock(abcStock)。
Borkerのborker =新しいBorker();
borker.takeOrder(buyStockOrder)。
borker.takeOrder(sellStockOrder)。
borker.placeOrdeers();
}
}