设计模式学习—State(状态机)
意图:允许一个对象在其状态改变时,改变它的行为。看起来对象似乎修改了它的类。
适用性:
1、一个对象的行为取决于它的状态,并且它必须在运行过程中可以根据它的状态改变它的行为;
2、一个操作中含有庞大的多分支的条件语句,并且这些分支依赖于该对象的状态;这个状态通常使用一个或多个枚举常量表示;通常,有多个操作包含这一相同的条件结构;State模式把每一个条件分支放入一个独立的类中;这使得你可以根据对象自身的情况把对象的状态作为一个对象,而且这一对象可以不依赖于其它对象而独立变化;
示例图:
示例代码:
//具体机器类行为的对象
//根据状态不同执行不同的内容
class CMachine
{
friend class CMachineState;
public:
CMachine();
public:
~CMachine(void);
public:
void Run();
public:
void SetState(CMachineState* pstate);
public:
void ChangeState(CMachineState* pstate);//CMachineState* pState);
private:
CMachineState* m_pState;
};
//具体状态类 初始化状态
void CMachineInitlizeState::Do(CMachine* pMachine)
{
_tprintf(_T("Mahchine is inited\n"));
//切换到运行状态
pMachine->ChangeState(new CMachineRunningState());
}
//运行状态类
void CMachineRunningState::Do(CMachine* pMachine)
{
_tprintf(_T("Mahchine is running\n"));
}
适用性:
1、一个对象的行为取决于它的状态,并且它必须在运行过程中可以根据它的状态改变它的行为;
2、一个操作中含有庞大的多分支的条件语句,并且这些分支依赖于该对象的状态;这个状态通常使用一个或多个枚举常量表示;通常,有多个操作包含这一相同的条件结构;State模式把每一个条件分支放入一个独立的类中;这使得你可以根据对象自身的情况把对象的状态作为一个对象,而且这一对象可以不依赖于其它对象而独立变化;
示例图:
示例代码:
//具体机器类行为的对象
//根据状态不同执行不同的内容
class CMachine
{
friend class CMachineState;
public:
CMachine();
public:
~CMachine(void);
public:
void Run();
public:
void SetState(CMachineState* pstate);
public:
void ChangeState(CMachineState* pstate);//CMachineState* pState);
private:
CMachineState* m_pState;
};
//具体状态类 初始化状态
void CMachineInitlizeState::Do(CMachine* pMachine)
{
_tprintf(_T("Mahchine is inited\n"));
//切换到运行状态
pMachine->ChangeState(new CMachineRunningState());
}
//运行状态类
void CMachineRunningState::Do(CMachine* pMachine)
{
_tprintf(_T("Mahchine is running\n"));
}
还没人赞这篇日记
热门话题 · · · · · · ( 去话题广场 )
- 歌手2024直播 3.9万次浏览
- 弥留之际你会想起什么? 9.3万次浏览
- 公司群里各种奇葩的请假理由 27.1万次浏览
- 那些超级英雄教会我的事 3.2万次浏览
- 你认为最直击心灵的诗歌 38.7万次浏览
- 文学作品中的父亲形象 3.4万次浏览