設計模式 狀態模式

2021-10-12 10:16:46 字數 1977 閱讀 3338

當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了它的類。
**結構

state類:抽象狀態類,定義乙個介面來封裝與context的乙個特定狀態相關的行為。

abstract

class

state

concretestate類:具體狀態,每乙個子類實現乙個與context的乙個狀態相關的行為。

class

concretestatea

extends

state

}class

concretestateb

extends

state

}

context類:維護乙個concretestate子類的例項

class

context

//省略set get方法

public

void

request()

}

具體優化例項:

// 未使用狀態模式的工作狀態類

class

work

public

void

sethour

(int hour)

public

boolean

isfinish()

public

void

setfinish

(boolean finish)

public

void

writeprogram()

else

if(hour<13)

else

if(hour<17)

else

else

else}}

}}

使用工作模式的如上工作類:

//工作

class

work

private

double hour;

private

boolean finish =

false

;public

boolean

isfinish()

public

void

setfinish

(boolean finish)

public

double

gethour()

public

void

sethour

(double hour)

public

void

setstate

(state s)

public

void

writeprogram()

}//抽象狀態

abstract

class

state

//工作狀態表

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

}

設計模式 狀態模式

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

設計模式 狀態模式

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

設計模式 狀態模式

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