设计模式之- 状态模式(State Pattern)

状态模式

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
 
C++实现代码:
#include<iostream>
#include<string>

using namespace std;

class State;

class Context {//上下文环境,拥有状态
    State* state;
public:
    Context(){
        state = nullptr;
    }
    void setState(State* state){
        this->state = state;     
    }
    State* getState(){
        return state;
    }
};



class State {//状态接口,可扩展出多种不同的状态
public:
    virtual void doAction(Context* context) = 0;
    virtual string toString() = 0;
};



class StartState :public State {//具体的状态,doAction方法能够以当前状态直接影响上下文
public:
    void doAction(Context* context) {
        cout<<"Player is in start state"<<endl;
        context->setState(this); 
    }

    string toString(){
        return "Start State";
    }
};



class StopState :public State {
public:
    void doAction(Context* context) {
        cout<<"Player is in stop state"<<endl;
        context->setState(this); 
    }

    string toString(){
        return "Stop State";
    }
};


class StatePatternDemo {
public:
    static void method() {
        Context* context = new Context();//上下文环境

        StartState* startState = new StartState();//第一次改变状态
        startState->doAction(context);
        cout<<context->getState()->toString()<<endl;

        StopState* stopState = new StopState();//第二次改变状态
        stopState->doAction(context);
        cout<<context->getState()->toString()<<endl;
    }
};


int main(int argc,char** argv){
    StatePatternDemo::method();
}

类图:

../_images/State.jpg

状态模式描述了一种由状态主导的环境上下文变化模式,能够抽象出一个个状态,从而对环境进行影响,挺有用的。

转载于:https://www.cnblogs.com/J1ac/p/9696009.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值