模式动机
- 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。
- 在UML中可以使用状态图来描述对象状态的变化。
模式定义
状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。
模式结构
状态模式包含如下角色
- Context:环境类
- State:抽象状态类
- ConcreteState:具体状态类

时序图

代码分析
#include <iostream>#include "Context.h"#include "ConcreteStateA.h"#include "ConcreteStateB.h"using namespace std;int main(int argc, char *argv[]){char a = '0';if('0' == a)cout << "yes" << endl;elsecout << "no" << endl;Context* c = new Context();c->request();c->request();c->request();delete c;return 0;}
// Context.h#param once#include "state.h"class Context{public:Context();virtual ~Context();void changeState(State* st);void request();private:State *m_pState;};
//ConText.cpp#include "Context.h"#include "ConcreteStateA.h"Context::Context(){m_pState = ConcreteStateA::Instance();}Context::~Context() {}void Context::changeState(State *st) {m_}
