012 第16章 狀態模式

2022-07-17 03:15:10 字數 2359 閱讀 2088

簡述:

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

狀態模式包括:抽象狀態類、具體狀態類、具體狀態維護類

狀態模式**:

1 #include 2

using

namespace

std;34

class

ccontext;5//

抽象狀態類

6class

cstate711

virtual

void handle(ccontext* pcontext) = 0;12

};13

14//

具體狀態維護類

15class

ccontext

1622

23void setstate(cstate*pstate)

2428 cstate* getstate()

2930

void request()

31};

3233

//具體狀態類

34class cconcretestatea : public

cstate

3545

46virtual

void handle(ccontext*pcontext)

4750

};51

52//

具體狀態類

53class cconcretestateb : public

cstate

5464

65virtual

void handle(ccontext*pcontext)

6669

};70

71int

main()

72

執行結果:

例:不同時間點工作狀態

**如下:

1 #include 2

using

namespace

std;34

class

cwork;5//

抽象狀態類

6class

cstate7;

1112

//工作類(具體狀態維護類)

13class

cwork

1425

26void settime(int

nhour)

2730

31int

gettime()

3235

36void setstate(cstate*pstate)

3740

41void settaskfinished(bool

bfinished)

4245

46bool

gettaskfinished()

4750

51void

writeprogram()

5255

};56

57//

具體狀態類

58class cforenoonstate : public

cstate

5972}73

};74

75//

具體狀態類

76class cnoonstate : public

cstate

7790}91

};92

93//

具體狀態類

94class cafternoonstate : public

cstate

95108

}109

};110

111//

具體狀態類

112class ceveningstate : public

cstate

113125

else

126134

}135

}136

};137

138//

具體狀態類

139class csleepingstate : public

cstate

140146

};147

148//

具體狀態類

149class creststate : public

cstate

150156

};157

158int

main()

159

輸出結果:

16狀態模式

狀態模式 設計模式其實很簡單 筆記 定義 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。抽象的狀態類 public abstract calss state 具體狀態a public class concretestatea extends state 覆蓋父類的抽象方法 ...

設計模式 16 狀態模式

狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。解決的問題 當控制乙個物件狀態轉換的條件表示式過於複雜,把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,把複雜的判斷邏輯簡單化。state 抽象狀態類,定義介面以封裝與context乙個特定狀態相關的行為 concer...

16 設計模式 狀態模式

乙個物件想內部狀態類改變時,允許改變其行為。就是把乙個物件的狀態改到一系列狀態類中,在狀態類中控制條件判斷 狀態改變。1 將狀態的行為都封裝都狀態類中,不同的狀態不同的類。2 狀態轉化條件在狀態類中,不會出現狀態隨意變換的問題。3 可拓展性性強。狀態的越多,類越多 1 上下文 維護當前狀態。2 抽象...