《大話設計模式》c 實現 狀態模式

2022-05-17 13:39:18 字數 2019 閱讀 7195

狀態模式包含如下角色:

2)適用場景:

a)狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判 斷邏輯簡單化。(簡單來說,就是把各種if else 轉變成了乙個個的具體狀態,原來if else 每種情況下的操作現在轉換到了某個具體狀態中)

b)當乙個物件行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時,就可以考慮使用狀態模式了。

state.h

1

#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

state.cpp

1 #include 2 #include "

state.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

work.h

1

#ifndef work

2#define work

34 #include "

state.h"5

class

work6;

2324

2526

27#endif

work.cpp

1 #include "

work.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

main.cpp

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 ...