state 狀態模式

2021-06-19 20:12:09 字數 1526 閱讀 2780

#include #include using namespace std;

/*1) 將 state宣告為 context的友元類(friend class) ,其作用是讓 state模式訪問 context

的 protected介面 changesate() 。

2) state 及其子類中的操作都將 context*傳入作為引數,其主要目的是 state 類可以通

過這個指標呼叫 context中的方法 (在本示例**中沒有體現) 。 這也是 state模式和 strategy

模式的最大區別所在。

*/class state;

class context

context(state *st):_st(st){}

~context()

void operation_inte***ce();

private:

friend class state;

void operation_change_state();

bool change_state(state *st)

private:

state *_st;

};class state

; virtual ~state(){};

virtual void operation_inte***ce(context *) =0;

virtual void operation_change_state(context *) =0;

protected:

bool change_state(context *con, state *st)

};void context::operation_inte***ce()

void context::operation_change_state()

class concrete_statea : public state

~concrete_statea(){}

virtual void operation_inte***ce(context *con)

};void concrete_statea::operation_change_state(context *con)

int main()

#include #include using namespace std;

class context;

class state

virtual string name() =0;

virtual void handle(context *) =0;

};class context

~context()

void set_state(state *st)

state *get_state()

void request()

string name()

};void concrete_statea::handle(context *con)

int main()

狀態 State 模式

物件狀態影響物件行為 物件擁有不同的狀態,往往會行使不同的行為.1 動機 在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化。比如文件處於唯讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為物件操作和狀態轉化之前引入緊耦...

狀態模式 State

個人理解 核心是context維護乙個當前狀態,並在invoke狀態方法時,將context維護的當前狀態更新至下一狀態 uml類圖 實現 using system namespace decoratormode public class agecontext public void printag...

狀態模式 State

狀態模式 state 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件的狀態轉換的條件表示式過於複雜時的情況,把狀態判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。如果狀態判斷很簡單,就沒有必要用 狀態模式 了 狀態模式結...