設計模式實現(十二) 狀態模式 State

2021-06-23 00:28:00 字數 974 閱讀 6953

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

狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜的情況(也就是if過於多的情況)。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。當然,如果這個狀態判斷很簡單,那麼就沒必要使用狀態模式了。

。。感覺這個設計模式有點作孽啊,用了設計模式比直接if判斷還麻煩。不過既然有人設計出這種模式,肯定是有用處的,下面我們一起來學習一下。

//狀態模式.h

class context;

class state

;class concretestateb : public state

;class concretestatea : public state

;

//狀態模式.cpp

#include #include "狀態模式原型.h"

static int h = 1;

//context類,維護乙個concretestate子類的例項,這個例項定義當前的狀態

class context

void request() };

//concretestate類,具體狀態,每乙個子類實現乙個與context的乙個狀態相關的行為 狀態一般有很多個,此處就不再多列了。囧,還是覺得if else if if 或者 switch case簡單一些

void concretestatea::handle(context *context)

else

}void concretestateb::handle(context *context)

else

}int main()

設計模式C 實現十二 狀態模式

狀態模式 state 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式國語複雜時的情況。把狀態的判斷邏輯轉移到不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。例如本文的例子,只要我們把時間輸入,就可以根據時間判斷使用哪個狀...

設計模式(十二 狀態模式

狀態模式,當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。1.如下 using system namespace state using system namespace state else using system namespace state else using s...

設計模式 十二 狀態模式 C

狀態模式 狀態模式允許乙個物件在其內部狀態改變的時候改變行為。在狀態模式 state pattern 中,類的行為是基於它的狀態改變的。這種型別的設計模式屬於行為型模式。設計的時候把狀態物件和目標物件分離。目標物件執行行為的時候,把目標物件傳遞給狀態物件a,如果滿足狀態a的條件,執行狀態a的方法,不...