1.コマンドモード:リクエストをオブジェクトとしてカプセル化します。これにより、さまざまなリクエストでクライアントをパラメーター化し、リクエストログをキューまたはログに記録して、取り消し可能な操作をサポートできます。
次に、コード例:
public class Barbecue { public void bakeMutton(){ System.out.println( "烤羊肉串" ); } public void bakeChickenWing(){ System.out.println( "烤鸡蝶" ); } } public abstract class Command { 保護されたバーベキューレシーバー。 public Command(バーベキューレシーバー){ this .receiver = receiver; } 抽象 public void excuteCommand(); } 公開 クラスBakeChickenWingCommand はCommand { public BakeChickenWingCommand(バーベキューレシーバー){ スーパー(レシーバー)を 拡張します。 } @Override public void excuteCommand(){ receiver.bakeChickenWing(); } } パブリック クラス BakeMuttonCommand extends Command { public BakeMuttonCommand(Barbecue receiver){ super (receiver); } @Override public void excuteCommand(){ receiver.bakeMutton(); } } 公開 class Waiter { private List <Command> orders = new ArrayList <> (); public void setOrder(Command command){ if(command instanceof BakeChickenWingCommand){ System.out.println( "Attendant:Chicken wings gone、gone、please be another barbecue " ); } Else { orders.add(command); System.out.println( " Add order: "+ command.toString()+" Time "+ new Date()); } } public void cancleOrder(コマンドコマンド){ orders.remove(コマンド); System.out.println( "取消订单" + command.toString()+ "時間间" + 新しい日付()); } public void notice(){ orders.forEach(Command :: excuteCommand); } } public class Main { public static void main(String [] args){ Barbecue boy = new Barbecue(); コマンドbakeMuttonCommand1 = new BakeMuttonCommand(boy); コマンドbakeMuttonCommand2 = new BakeMuttonCommand(boy); コマンドbakeChickenWingCommand1 = new BakeChickenWingCommand(boy); ウェイターガール = new Waiter(); girl.setOrder(bakeMuttonCommand1); girl.setOrder(bakeMuttonCommand2); girl.setOrder(bakeChickenWingCommand1); girl.notice(); } }
3、利点
1.コマンドキューを簡単に設計できる
2.必要に応じて、コマンドを簡単にログに記録できます
3.受信側が要求を拒否するかどうかを決定できるようにする
4.リクエストを簡単に元に戻してやり直すことができます
5.新しく追加された特定のコマンドクラスは他のクラスに影響しないため、新しい特定のコマンドクラスを簡単に追加できます。
アジャイル開発の原則は、実際にはコードに必要とされない推測ベースの機能を追加しないように指示しています。必要に応じてリファクタリングできます。