ビッグトークデザインモード-コマンドモード

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.新しく追加された特定のコマンドクラスは他のクラスに影響しないため、新しい特定のコマンドクラスを簡単に追加できます。

 アジャイル開発の原則は、実際にはコードに必要とされない推測ベースの機能を追加しないように指示しています。必要に応じてリファクタリングできます。

おすすめ

転載: www.cnblogs.com/zsmcwp/p/12694657.html