(十)狀態模式

2021-06-21 09:12:34 字數 1166 閱讀 3378

狀態模式是當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。

當乙個物件的狀態轉換需要太多的if-else或者其他的判斷語句的時候,就可以用這個模式,把狀態的判斷邏輯轉移到表示不同狀態的一系列的類中,也就是把本來在一起的各個判斷語句解開來。

用乙個表示不同時間段程式設計師狀態的例子:

#include #include using namespace std;

class work;

class state

};class work

void set_state( state *s )

void set_time( double h )

void work_finish()

double get_time()

bool get_finish_work()

void writeprogram()

private:

state *current;

bool finish_work;

double hour;

};class sleeping_state : public state

};

class rest_state : public state

};class evening_state : public state

else

else}}

};class afternoon_state : public state

else

}};class noon_state : public state

else

}};class forenoon_state : public state

else

}};int main()

在**中我們的work類就像是context類一樣,剛開始的時候我們把work的物件w中的時間初始化為9點,state物件current初始化為forenoon_state,用w中的writeprogram來得出此時的狀態,當時間hour改變的時候根據hour來決定要new乙個什麼類給w中的current,如果要想增加什麼狀態的話,就再寫乙個繼承state的類,或許還要改一下相關的狀態類的判斷條件就行了,比起把一大堆if-else語句擠在一起來判斷要好得多!

設計模式之十 狀態模式

目錄 狀態模式 目錄 定義 例子 設計原則 總結 狀態模式允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。我們使用 head first 設計模式 中的糖果機例子 糖果機有noquarter hasquarter sold soldout等狀態,當然,我們後期可以根據需求加入win...

設計模式 狀態模式

狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一些列類當中,可以把複雜的判斷邏輯簡化。當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行...

設計模式 狀態模式

1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境 context 它定義了客...