狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。
以下為電梯的上下運動的例子:
class elevator;
//狀態基類
class state
virtual void move(elevator *elevator); //電梯運動
};//電梯類
class elevator
;//電梯向上狀態
class upstate: public state
virtual void move(elevator *elevator); //電梯向上運動
};//電梯向下狀態
class downstate: public state
virtual void move(elevator *elevator); //電梯向下運動
};
#include "state.h"
#include using namespace std;
elevator::elevator(state *state)
void elevator::setstate(state *state)
void elevator::request()
void state::move(elevator *elevator)
void upstate::move(elevator *elevator)
void downstate::move(elevator *elevator)
int main()
狀態模式的好處是將與特定狀態相關的行為區域性化,並且將不同狀態的行為分割來來。
狀態模式通過把各種狀態轉移邏輯分布到state的子類之間,來減少相互間的依賴。
當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時,可以考慮使用狀態模式。
狀態 State 模式
物件狀態影響物件行為 物件擁有不同的狀態,往往會行使不同的行為.1 動機 在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化。比如文件處於唯讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為物件操作和狀態轉化之前引入緊耦...
狀態模式 State
個人理解 核心是context維護乙個當前狀態,並在invoke狀態方法時,將context維護的當前狀態更新至下一狀態 uml類圖 實現 using system namespace decoratormode public class agecontext public void printag...
state 狀態模式
include include using namespace std 1 將 state宣告為 context的友元類 friend class 其作用是讓 state模式訪問 context 的 protected介面 changesate 2 state 及其子類中的操作都將 context ...