簡述:
狀態模式:當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。
狀態模式包括:抽象狀態類、具體狀態類、具體狀態維護類
狀態模式**:
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 抽象...