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

來源:互聯網
上載者:User
狀態模式(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'm concretestateA.\n";    }};class ConcreteStateB: public State{public:    virtual void Handle(Context *pContext){        std::cout << "I'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'm concretestateA.    State *pState2 = new ConcreteStateB();    context->ChangeState(pState2);    context->Request();  //Output: I'm concretestateB.    if(pState){        delete pState;        pState = NULL;      }    if(pState2){        delete pState2;        pState2 = NULL;    }    if(context){        delete context;        context = NULL;    }    return 0;}

以上就是C++設計模式淺識狀態模式的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.