介绍
允许对象在内部状态改变时,改变它的行为
参与者
State 状态基类
ConcreteState 具体状态
Context 用户使用环境
实现代码
#include <iostream>
class State{//State 状态基类
public:
virtual void Work() = 0;
};
class DayState:public State{//ConcreteState 具体状态
public:
void Work() override
{
std::cout<<"白天就该工作啊!"<<std::endl;
}
};
class NightState:public State{//ConcreteState 具体状态
public:
void Work() override
{
std::cout<<"晚上就该加班啊!"<<std::endl;
}
};
class Company {//Context 用户使用环境
public:
void Run()
{
state->Work();
}
void SetState(State *state1)
{
state = state1;
}
private:
State *state;
};
int main()
{
State *night = new NightState();
State *day = new DayState();
Company company;
company.SetState(day);
company.Run();
company.SetState(night);
company.Run();
}
输出结果
白天就该工作啊!
晚上就该加班啊!
特点
- 将特定状态相关的行为局部化
- 状态转换显示化
- State状态对象可以被共享
- 会增加系统类和对象的个数
- 状态模式的结构与实现都较为复杂
参考
- 《设计模式:可复用面向对象软件的基础》