好久没有写blog了!
最近决定多写写,把自己的经验多给大家分享!
State模式的定义:
不同的状态,不同的行为;或者说,每个状态有着相应的行为.
我举个游戏应用的例子吧!mmo中,游戏世界可以分为(登陆时前,进入游戏中,进入游戏后)3个状态(我打的比喻)
首先 抽象状态的基类
class Game;
class State
{
public:
/// 状态执行
virtual void Handle(Game* game) = 0;
/// 状态切换
virtual void nextState(Game* game) = 0;
}
然后处理具体的状态
class LoginState : public State
{
public:
void Handle(Game* game) {
game->LoginHandle();
}
void nextState(Game* game) {
// 根据不同的情况
// 更改mState
}
}
class LoginingState: public State
{
public:
void Handle(Game* game) {
game->LoadingHandle();
}
void nextState(Game* game) {
// 根据不同的情况
// 更改mState
}
}
class GameState: public State
{
public:
void Handle(Game* game) {
game->GameHandle();
}
void nextState(Game* game) {
// 根据不同的情况
// 更改mState
}
}
我们定义游戏的管理类
class Game
{
private:
State* mState;
public:
virtual void LoginHandle(){
}
virtual void LoadingHandle(){
}
virtual void GameHandle(){
}
public:
// 状态改变
void nextState(){
mState->nextState(this);
}
// 调度
void Handle(){
mState->Handle(this);
}
}