ホームページ  >  記事  >  バックエンド開発  >  C++ デザイン パターンのコマンド モードの簡単な理解

C++ デザイン パターンのコマンド モードの簡単な理解

黄舟
黄舟オリジナル
2017-01-17 13:43:521484ブラウズ

コマンド モード (コマンド) では、リクエストをオブジェクトとしてカプセル化し、さまざまなリクエストでクライアントをパラメータ化することができ、リクエストをキューに入れたり、リクエスト ログを記録したり、可逆操作をサポートしたりできます。

テストケース:

[code]int main(){
    Barbecuer boy;
    BakeChickenWingCommand bakechickenwingcommand1(boy);
    BakeChickenWingCommand bakechickenwingcommand2(boy);
    BakeMuttonCommand bakemuttoncommand1(boy);
    BakeMuttonCommand bakemuttoncommand2(boy);

    Waiter girl;
    girl.SetOrder(&bakechickenwingcommand1);
    girl.SetOrder(&bakechickenwingcommand2);
    girl.SetOrder(&bakemuttoncommand1);
    girl.SetOrder(&bakemuttoncommand2);
    girl.Notify();
    girl.CancelOrder(&bakechickenwingcommand2);
    girl.Notify();

    return 0;
}

クラス実装:

[code]class Barbecuer{
public:
    void BakeMutton()
    {
        cout << "Meat\n";
    }
    void BakeChickenWing()
    {
        cout << "Chicken\n";
    }
};

class Command{
protected:
    Barbecuer receiver;
public:
    Command(){}
    Command(Barbecuer & b) :receiver(b){}
    virtual void ExcuteCommand() = 0;
};

class BakeMuttonCommand :public Command{
public:
    BakeMuttonCommand(Barbecuer & b) { receiver = b; }
    void ExcuteCommand(){ receiver.BakeMutton(); }
};

class BakeChickenWingCommand :public Command{
public:
    BakeChickenWingCommand(Barbecuer & b) { receiver = b; }
    void ExcuteCommand(){ receiver.BakeChickenWing(); }
};

class Waiter{
    list<Command *>orders;
public:
    void SetOrder(Command * comptr);
    void CancelOrder(Command * comptr);
    void Notify();
};

void Waiter::SetOrder(Command * comptr){
    orders.push_back(comptr);
    cout << "Add order\n";
}

void Waiter::CancelOrder(Command * comptr){
    orders.remove(comptr);
    cout << "Cancel order\n";
}

void Waiter::Notify(){
    for each (Command * var in orders){
        var->ExcuteCommand();
    }
}

概要:

必要に応じてコマンドをログに記録することが簡単になります。 request;

リクエストの取り消しとやり直しは簡単に実装できます

新しいコマンド クラスを追加しても他のクラスに影響を与えないため、新しい特定のコマンド クラスを追加するのは簡単です。

コマンドモードは、操作を要求するオブジェクトと操作の実行方法を知っているオブジェクトを分離します



上記はC++デザインモードのコマンドモードの内容です。さらに関連する内容については、注意してください。 PHP 中国語 Web サイト (www.php .cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。