1. 程式人生 > >行為型模型 狀態模式

行為型模型 狀態模式

簡化 turn 通過 include pla alt 場景 處的 ext

行為型模型 狀態模式

技術分享

Context:用戶對象
擁有一個State類型的成員,以標識對象的當前狀態;
State:接口或基類
封裝與Context的特定狀態相關的行為;
ConcreteState:接口實現類或子類
實現了一個與Context某個狀態相關的行為。

適用於:
對象的行為,依賴於它所處的當前狀態。行為隨狀態改變而改變的場景。

/**
 * 行為型模型 狀態模式
 * State模式也叫狀態模式,是行為設計模式的一種。
 * State模式允許通過改變對象的內部狀態而改變對象的行為,這個對象表現得就好像修改了它的類一樣。
 * 狀態模式主要解決的是當控制一個對象狀態轉換的條件表達式過於復雜時的情況。把狀態的判斷邏輯轉譯到表現不同狀態的一系列類當中,可以把復雜的判斷邏輯簡化。
 *
 
*/ #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> // 前置聲明 class Context; class State { public: virtual void doAction(Context * context) = 0; virtual std::string toString() = 0; virtual ~State() {} }; class Context { public: Context() { state
= nullptr; } void setState(State * state) { this->state = state; } State * getState() { return state; } void doAction() { if ( state == nullptr ) { std::cout << "None state" << std::endl; }
else { state->doAction(this); } } private: State * state; }; class StartState: public State { public: virtual void doAction(Context * context) override { if (context->getState() == nullptr) { std::cout << "None start state" << std::endl; } else { std::cout << context->getState()->toString() << ": Player is in start state" << std::endl; } } virtual std::string toString() override { return "Start State"; } }; class StopState: public State { public: virtual void doAction(Context * context) override { if (context->getState() == nullptr) { std::cout << "None stop state" << std::endl; } else { std::cout << context->getState()->toString() << ": Player is in stop state" << std::endl; } } virtual std::string toString() override { return "Stop State"; } }; void mytest() { Context * context = new Context(); StartState * startState = new StartState(); StopState * stopState = new StopState(); context->doAction(); context->setState(startState); context->doAction(); context->setState(stopState); context->doAction(); delete stopState; stopState = nullptr; delete startState; startState = nullptr; delete context; context = nullptr; return; } int main() { mytest(); system("pause"); return 0; }

行為型模型 狀態模式