C++设计模式浅识状态模式

黄舟
黄舟 原创
2017-01-17 13:34:08 1162浏览

状态模式(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++设计模式浅识状态模式的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!


声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。