文章目录
前言
今天复习了状态模式,感觉平常可能用的会比较多(解决多分支问题),这里分享给大家。
1. 状态模式的理解
状态模式,就是把所有的状态抽象成一个个具体的类,然后继承一个抽象状态类,在每一个状态类内封装对应状态的行为,符合开放封闭原则,当增加新的状态或减少状态时,只需修改关联的类即可。很适合多分支行为方法的处理,这里的多分支,当然是状态比较多的情况下,如果只有小于4个状态,个人认为还是分支处理简单些。
状态模式正规的定义与类图(引用《大话设计模式》)如下所示:
2. 状态模式的C++实现
这里以一天工作中的工作状态为例实现状态模式。
工作状态的类图结构(引用《大话设计模式》)如下所示:
C++代码实现如下:
#include <iostream>
#include <memory>
//*********************State Pattern*******************
class Work;
//抽象状态类
class State
{
public:
virtual void WriteProgram(Work* ptrWork) = 0;
};
class ForenoonState;
//工作类
class Work
{
private:
std::shared_ptr<State> smartState;
double hour;
bool finish;
public:
Work();
void SetHour(const double h)
{
hour = h;
}
double GetHour() const
{
return hour;
}
void SetFinish(bool bFinish)
{
finish = bFinish;
}
bool GetFinish() const
{
return finish;
}
void SetState(std::shared_ptr<State> pState)
{
smartState = pState;
}
std::shared_ptr<State>