一、意图:
允许一个对象在其内部状态改变时改变它的行为。
二、类图:
三、组成元素:
i. Context:环境
ii. State:状态接口
ConcreteState:具体状态子类四、实现代码:
#include "iostream" using namespace std; class Context; class ConcreteStateA; class ConcreteStateB; class State { public: State() { } virtual void Handle(Context* pContext)=0; }; class Context { private: State* m_State; public: Context(State* pState) { m_State=pState; } void Request() { if (NULL!=m_State) { m_State->Handle(this); } } void ChangState(State* pState) { if (NULL!=m_State) { delete m_State; m_State=NULL; } m_State=pState; } }; class ConcreteStateA:public State { public: ConcreteStateA() { } void Handle(Context* pContext) { cout<<"Handle by ConcreteStateA"<<endl; if (NULL!=pContext) { pContext->ChangState(new ConcreteStateB()); } } }; class ConcreteStateB:public State { public: ConcreteStateB() { } void Handle(Context* pContext) { cout<<"Handle by ConcreteStateB"<<endl; if (NULL!=pContext) { pContext->ChangState(new ConcreteStateA()); } } }; void main() { State* pState=new ConcreteStateA(); Context* pContext=new Context(pState); pContext->Request(); pContext->Request(); pContext->Request(); delete pContext; }
本文介绍了一种常用的设计模式——状态模式,通过该模式可以使对象根据内部状态的变化而改变其行为。文中详细解释了状态模式的基本概念,并提供了一个具体的实现案例,包括环境类、状态接口及具体状态子类的定义。

被折叠的 条评论
为什么被折叠?



