一、原理讲解
别名状态对象(object for state)。
1.1意图
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
1.2应用场景
- 一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为;
- 一个操作中含有庞大的分支语句的条件语句,且这些分支依赖于该对象的状态;
1.3结构图(UML图)
1.4代码实现步骤
a1 定义一个状态接口类IState,定义一个接口函数handle();
a2 定义一个具体状态类ConcreteState,实现接口函数handle(),处理完后用形参传入上下文类对象改变当前状态;
a3 定义一个上下文类Context,定义两个接口函数request()和changeState(),request()调用具体状态类处理函数;
二、实现代码
StatePattern.cpp
#include <iostream>
using namespace std;
#define DELETE(pointer) delete pointer; pointer=nullptr
class Context;
class IState // 抽象状态接口类
{
public:
virtual ~IState() {
}
virtual void handle(Context *context) = 0; // 传入上下文类接口,处理完后改变当前状态(可以理解为设置为下一状态)
};
class ConcreteState1 : public IState // 具体状态接口类1
{
public:
void handle(Context *context)</