設計模式 狀態模式

2021-10-07 04:33:53 字數 2465 閱讀 1475

1、uml圖

2、基本**

abstract

class

state

class

concretestatea

extends

state

}class

concretestateb

extends

state

}class

context

public state getstate()

public

void

setstate

(state state)

public

void

request()

}public

class

main

}

3、優點:4、缺點:state模式的問題主要是邏輯分散化,狀態邏輯分布到了很多的state的子類中,很難看到整個的狀態邏輯圖,這也帶來了**的維護問題。

5、什麼時候使用狀態模式?

1、題目:2、**:

class

work

public

void

sethour

(int hour)

public boolean getfinish()

public

void

setfinish

(boolean finish)

public

void

writeprogram()

else

if(hour<13)

else

if(hour<17)

else

else

else}}

}}public

class

main

}

3、問題問題:

abstract

class

state

class

work

public state getcurrent()

public

void

setcurrent

(state current)

public

double

gethour()

public

void

sethour

(double hour)

public

boolean

isfinish()

public

void

setfinish

(boolean finish)

public

void

setstate

(state s)

public

void

writeprogram()

}class

forenoonstate

extends

state

else}}

class

noonstate

extends

state

else}}

class

afternoonstate

extends

state

else}}

class

eveningstate

extends

state

else

else}}

}class

sleepingstate

extends

state

}class

reststate

extends

state

}public

class

main

}

結果為:

當前時間9.0點 上午工作,精神百倍

當前時間10.0點 上午工作,精神百倍

當前時間12.0點 餓了,午飯;犯睏,午休。

當前時間13.0點 下午狀態不錯,繼續努力

當前時間14.0點 下午狀態不錯,繼續努力

當前時間17.0點 加班哦,疲憊至極

當前時間17.0點 加班哦,疲憊至極

當前時間19.0點 加班哦,疲憊至極

當前時間22.0點 不行了,睡著了。

設計模式 狀態模式

狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一些列類當中,可以把複雜的判斷邏輯簡化。當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行...

設計模式 狀態模式

1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境 context 它定義了客...

設計模式 狀態模式

描述 允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。通常應用在有好多狀態的流程中。類圖 以下程式模擬糖果機器投幣取糖果的狀態流程。1.定義狀態...