ホームページ  >  記事  >  バックエンド開発  >  C++ デザイン パターンの状態パターンの簡単な紹介

C++ デザイン パターンの状態パターンの簡単な紹介

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

状態パターン (State): オブジェクトの内部状態が変化したときに、オブジェクトの動作を変更できるようにします。

状態パターンは主に、オブジェクトの状態遷移を制御する条件式が複雑すぎる場合の状況を解決します。状態判定ロジックを異なる状態を表す一連のクラスに転送することで、複雑な判定を論理化できます。

パターン実装:

[code]class Context;

class State{
public:
    virtual void Handle(Context *pContext) = 0;
};

class ConcreteStateA: public State{
public:
    virtual void Handle(Context *pContext){
        std::cout << "I&#39;m concretestateA.\n";
    }
};

class ConcreteStateB: public State{
public:
    virtual void Handle(Context *pContext){
        std::cout << "I&#39;m concretestateB.\n";
    }
};

class Context{
public:
    Context(State *state):pState(state){}
    void Request(){
        if(pState){
            pState->Handle(this);
        }
    }

    void ChangeState(State *pstate){
        pState = pstate;
    }
private:
    State *pState;
};

クライアント

[code]int main(){
    State *pState = new ConcreteStateA();
    Context *context = new Context(pState);
    context->Request();  //Output: I&#39;m concretestateA.

    State *pState2 = new ConcreteStateB();
    context->ChangeState(pState2);
    context->Request();  //Output: I&#39;m concretestateB.

    if(pState){
        delete pState;
        pState = NULL;  
    }
    if(pState2){
        delete pState2;
        pState2 = NULL;
    }
    if(context){
        delete context;
        context = NULL;
    }
    return 0;
}

上記は、C++ デザイン パターンの状態パターンの簡単な紹介の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


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