デザインパターン注(XX)のコマンドモードを横たわります

栗のために

沿道には、一つだけのボス、バーベキューを食べに屋台が、また、単一のポイントが、また、忙しい電荷を覚えて、顧客がキューに何を持っています。

反例アイデア1

より多くの要求よりも多くの顧客は、それが簡単に混乱している場合、彼はあなたがあまりにも忙しい上司が来て3を、呼び出し5弦ラムの串焼き、焼き手羽先と呼ばれます。文によって、出力文であるコードを反映し、それはウェイターを持っている必要があります。

ファサード改修

話は安いです、私のコードを表示します

(くそ以下、アップグレーディング)

/**
 * 抽象命令
 * Created by callmeDevil on 2019/12/14.
 */
public abstract class Command {

    protected Barbecuer receiver;

    public Command(Barbecuer receiver){
        this.receiver = receiver;
    }

    // 执行命令
    public abstract void excuteCommand();

}
/**
 * 烤羊肉串命令
 * Created by callmeDevil on 2019/12/14.
 */
public class BakeMuttonCommand extends Command{

    public BakeMuttonCommand(Barbecuer receiver){
        super(receiver);
    }

    @Override
    public void excuteCommand() {
        receiver.bakeMutton();
    }

}
/**
 * 烤鸡翅命令
 * Created by callmeDevil on 2019/12/14.
 */
public class BakeChickenWingCommand extends Command{

    public BakeChickenWingCommand(Barbecuer receiver){
        super(receiver);
    }

    @Override
    public void excuteCommand() {
        receiver.bakeChickenWing();
    }

}
/**
 * 烤肉串者
 * Created by callmeDevil on 2019/12/14.
 */
public class Barbecuer {

    public void bakeMutton(){
        System.out.println("烤羊肉串!");
    }

    public void bakeChickenWing(){
        System.out.println("烤鸡翅!");
    }

}
/**
 * 服务员
 * Created by callmeDevil on 2019/12/14.
 */
public class Waiter {

    private Command command;

    // 不管什么用户想要什么烤肉,反正都是命令,只管记录订单,然后通知烤肉串者即可
    public void setOrder(Command command){
        this.command = command;
    }

    public void notifying(){
        command.excuteCommand();
    }

}
public class Test {
    public static void main(String[] args) {
        // 开店前的准备
        Barbecuer boy = new Barbecuer();
        Command bakeMuttonCommand1 = new BakeMuttonCommand(boy);
        Command bakeMuttonCommand2 = new BakeMuttonCommand(boy);
        BakeChickenWingCommand bakeChickenWingCommand1 = new BakeChickenWingCommand(boy);
        Waiter girl = new Waiter();

        // 开门营业
        girl.setOrder(bakeMuttonCommand1);
        girl.notifying();
        girl.setOrder(bakeMuttonCommand2);
        girl.notifying();
        girl.setOrder(bakeChickenWingCommand1);
        girl.notifying();
    }
}

業績

烤羊肉串!
烤羊肉串!
烤鸡翅!

実際には、あなたがそのような時間の単一のポイントとして、向上させることができウェイターはなく、単一のポイントで終了した後に、ポイントではありません、とバーベキュー、注文を変更またはキャンセルすることができないとき、その上のグリルとバーベキュー肉の多くでもある、と誰が、ここでは最適化されません。

コマンドモード

定義

したがって、要求の異なるパラメータを使用してクライアントを作る、オブジェクトに対する要求をカプセル化し、要求キューまたはログ要求、および取り消し可能操作をサポート。

UMLダイアグラム

概要

  • コマンドキューを設計することが容易です
  • 必要の場合は、コマンドログに簡単にすることができ
  • 当事者が要求をキャンセルするかどうかを決定することを可能にするための要求を受け取ります
  • あなたは簡単にリクエストしてREDOの撤退を達成することができます
  • 新しいコンクリートのコマンドクラスの追加が容易であるので、他のクラスには影響しません新しいコンクリートのコマンドクラスを追加することにより、
  • キーは、オブジェクトのコマンドモード動作を要求することで、対象物を分離操作(スタッフやケバブをしている)を実行する方法を知ることです。

かどうかは、コマンドモードを実装しなければならないアンドゥ/リドゥ機能と同様の状況などに遭遇しましたか?

アジャイル開発の原則は、私たちはコードの実際の機能が必要とされていないに基づいて推測する追加しないように指示します。それが不明である場合は、コマンドモードへのシステムニーズかどうか、一般的には、実際には、このモデルで必要とされるときは、アンドゥ/リドゥ操作と他の機能、元のように真のニーズ限り、再構成を達成することは困難ではない、それを実装するために急いではありません。リファクタリングコマンド・モードでは意味があります。

おすすめ

転載: www.cnblogs.com/call-me-devil/p/12040182.html