狀態模式包含如下角色:
2)適用場景:
a)狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判 斷邏輯簡單化。(簡單來說,就是把各種if else 轉變成了乙個個的具體狀態,原來if else 每種情況下的操作現在轉換到了某個具體狀態中)
b)當乙個物件行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時,就可以考慮使用狀態模式了。
state.h
1state.cpp#ifndef state
2#define state
3extern
class
work;45
class
state6;
9virtual
void writeprogram(work*w){};
10};
1112
class forenoonstate :public
state13;
1718
19class noonstate :public
state20;
2425
26class afternoonstate :public
state27;
3132
33class reststate :public
state34;
3839
#endif
1 #include 2 #include "work.hstate.h
"3 #include "
work.h"4
5using
namespace
std;67
void forenoonstate :: writeprogram(work*w)816
}1718void noonstate:: writeprogram(work*w)
1927}28
2930
void afternoonstate :: writeprogram(work*w)
314041}
4243
44void reststate:: writeprogram(work*w)
45
1work.cpp#ifndef work
2#define work
34 #include "
state.h"5
class
work6;
2324
2526
27#endif
1 #include "main.cppwork.h"2
3work::work()
8 work::~work()913
1415
double
work::gethour()
1619
void work::sethour(double
h)20
2324
bool
work::getfinish()
2528
void work::setfinish(bool
f)29
3233
void work::setstate(state*s)
3440
41void
work::writeprogram()
42
1 #include 2 #include 3 #include "work.h"4
//#include "state.h"56
using
namespace
std;78
void
main()
9
大話設計模式 狀態模式
在狀態模式 state pattern 中,類的行為是基於它的狀態改變的。這種型別的設計模式屬於行為型模式。我們建立表示各種狀態的物件和乙個行為隨著狀態物件改變而改變的 context 物件。大話設計模式中程傑老師給出的定義是,狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改...
大話設計模式 狀態模式
首先看一段 public class work else if hour 13 else if hour 17 else elseelse 當有很多條件判斷時,且很多的條件判斷後產生了很多的業務邏輯,雖然 可以正常執行,但是要修改某個邏輯,既整改邏輯流程也許就回發生改變,從而加大了維護時間的成本,並...
java 狀態模式(大話設計模式)
該模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。當然,如果這個判斷邏輯很簡單,那就沒必要用 狀態模式 了。互相組合 抽象狀態類 author administrator public abstract ...