C++設計模式淺識狀態模式

黄舟
發布: 2017-01-17 13:34:08
原創
1539 人瀏覽過

狀態模式(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中文網(www.php.cn)!


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板