狀態模式(state)允許乙個物件在其內部狀態改變的時候改變行為。結構圖為:
汽車有不同的檔速,當行車時,經常需要換檔,換檔是從低到高,換檔的過程就是狀態的改變過程。
實現**:
//car.h
class
state;
class
car
;#include
"stdafx.h
"#include
"car.h
"#include
"state.h
"#include
<
iostream
>
using
namespace
std;
car::car(state
*pstate)
car::
~car()
void
car::setstate(state
*pstate)
void
car::pull()
// state.h
#include
<
iostream
>
#include
"car.h
"class
state ;//
state.cpp
#include
"stdafx.h
"#include
"state.h
"using
namespace
std;
state::state(
char
*pname)
state::
~state()
ostream
&operator
<<
(ostream
&os, state
&state)
// off.h
#include
"state.h
"class
off :
public
state;//
off.cpp
#include
"stdafx.h
"#include
"off.h
"#include
"low.h
"#include
<
iostream
>
using
namespace
std;
off::off() : state("空檔
")
off::
~off()
void
off::changestate(car
*pcar)
// low.h
#include
"state.h
"class
low :
public
state;//
low.cpp
#include
"stdafx.h
"#include
"low.h
"#include
"medium.h
"low::low() : state("低檔
")
low::
~low()
void
low::changestate(car
*pcar)
// medium.h
#include
"state.h
"class
medium :
public
state;//
medium.cpp
#include
"stdafx.h
"#include
"medium.h
"#include
"high.h
"medium::medium() : state("中檔
")
medium::
~medium()
void
medium::changestate(car
*pcar)
// high.h
#include
"state.h
"class
high :
public
state;//
high.cpp
#include
"stdafx.h
"#include
"high.h
"#include
"off.h
"high::high() : state("高檔
")
high::
~high()
void
high::changestate(car
*pcar)
// main.cpp
#include
"stdafx.h
"#include
"car.h
"#include
"off.h
"int
main(
intargc,
char
*ar**)
最後輸出:
當前檔位:空檔
掛新檔,當前檔位:低檔
掛新檔,當前檔位:中檔
掛新檔,當前檔位:高檔
掛新檔,當前檔位:空檔
設計模式 狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一些列類當中,可以把複雜的判斷邏輯簡化。當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行...
設計模式 狀態模式
1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境 context 它定義了客...
設計模式 狀態模式
描述 允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。通常應用在有好多狀態的流程中。類圖 以下程式模擬糖果機器投幣取糖果的狀態流程。1.定義狀態...