首页 > 其他 > 详细

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

时间:2018-09-24 17:43:06      阅读:202      评论:0      收藏:0      [点我收藏+]

状态模式

在状态模式(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();
}

类图:

技术分享图片

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

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

原文:https://www.cnblogs.com/J1ac/p/9696009.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!