設計模式 狀態模式

2021-09-29 20:48:26 字數 1442 閱讀 3268

上午狀態好,中午想睡覺,下午漸恢復,加班苦煎熬。其實是一種狀態的變化,不同的時間會有不同的狀態。

martinfowler曾在《重構》中寫過乙個很重要的**的壞味道,叫做「long method」,方法如果過長其實極有可能是有壞味道了。

如果乙個方法的責任過大了,那麼將會在修改起來的時候比較麻煩。

物件導向設計其實就是希望做到將**的責任分解。也就是單一職責原理。

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

狀態模式主要解決的是控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態判斷邏輯轉移到表示不同狀態的一系列類當中,闊以把複雜的判斷邏輯簡化。如果這個狀態判斷很簡單,就沒必要使用狀態模式了。

狀態模式的好處是將與特定狀態相關的行為區域性化,並且將不同狀態的行為分割開來

狀態模式通過把各種狀態轉移邏輯分布到state的子類之間,來減少相互間的依賴。

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

package demo1;

public

class

statedesignmodel

}abstract

class

state

class

morningstate

extends

state

else}}

class

noonstate

extends

state

else}}

class

afternoonstate

extends

state

else}}

class

eveningstate

extends

state

else

else}}

}class

reset

extends

state

}class

sleepstate

extends

state

}class

work

public

intgethour()

public

void

sethour

(int hour)

public

void

setis_finish

(boolean is_finish)

public

boolean

isis_finish()

public

void

setstate

(state state)

public

void

writeprogram()

}

設計模式 狀態模式

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

設計模式 狀態模式

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

設計模式 狀態模式

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