状态模式
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
#pragma once
#include <iostream>
#include <vector>
#include <string>
#include <Windows.h>
using namespace std;
class Context;
//抽象状态类
class State
{
public:
virtual void Handle(Context& con) = 0;
};
//当前状态类
class Context
{
public:
Context(State* s)
{
//初始化最初状态
stat = s;
//初始化最初时间
minute = 0;
}
void setState(State* s)
{
if ((NULL != s) && (NULL != stat))
{
delete stat;
stat = s;
}
}
void setMinute(int m)
{
minute = m;
}
int getMinute()
{
return minute;
}
void showCurrentState()
{
stat->Handle(*this);
}
private:
State* stat;
int minute;
};
//具体状态3
class Thirt_State : public State
{
public:
virtual void Handle(Context& con)
{
if (con.getMinute() < 10)
cout << "风暴龙王刷新" << endl;
else
{
cout << "当前时间状态出错" << endl;
}
}
};
//具体状态2
class Second_State : public State
{
public:
virtual void Handle(Context& con)
{
if (con.getMinute() < 5)
cout << "小龙刷新" << endl;
else
{
con.setState(new Thirt_State);
con.showCurrentState();
}
}
};
//具体状态1
class First_State : public State
{
public:
First_State() {}
virtual void Handle(Context& con)
{
if (con.getMinute() < 0.5)
cout << "红蓝buff刷新" << endl;
else
{
con.setState(new Second_State);
con.showCurrentState();
}
}
};
int main()
{
First_State* stat = new First_State;
Context con(stat);
con.showCurrentState();
con.setMinute(4);
con.showCurrentState();
con.setMinute(8);
con.showCurrentState();
system("pause");
return 1;
}
使用场景
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。