狀態模式 根據狀態來分離和選擇行為

2021-10-05 22:27:07 字數 2095 閱讀 2334

狀態模式主要解決的是當控制乙個物件狀態轉化的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不太狀態的一系列類當中,可以把複雜的判斷邏輯簡化。

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

abstract

class

state

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

class

concretestatea

:state

}class

concretestateb

:state

}

context上下文類,維護乙個concretestate子類的例項,這個例項定義當前的狀態

class

context

public

state state//讀寫狀態方法

set}

public

void

request()

//對請求做處理,並設定下一狀態。

}

客戶端**

static

void

main

(string

args)

狀態模式的本質:

狀態模式的優點:

狀態模式的缺點:

1、採用狀態模式實現工作流中的請假流程(**+uml類圖)

某人提出請假申請,先由專案經理審批,如果專案經理不同意,審批就直接結束

如專案經理同意,再看是否超過3天,如果三天以內,審批直接結束

否則,交給部門經理,部門經理審核後,無論是否同意,審批直接結束

###uml圖

state狀態抽象類

public

abstract

class

state

專案經理狀態類

public

class

projectmanager

extends

state

public

void

setflag

(boolean flag)

@override

public

void

yijian

(personcontext p)

else

}else

}}

部門經理類

public

class

departmentmanager

extends

state

public

void

setflag

(boolean flag)

@override

public

void

yijian

(personcontext p)

else

}else

}}

人事部門類

public

class

hrmanager

extends

state

public

void

setflag

(boolean flag)

@override

public

void

yijian

(personcontext p)

else

}}

客戶端類及執行效果

狀態模式State根據狀態來分離和選擇行為

允許乙個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了它的類。狀態模式的功能就是分離狀態的行為,通過維護狀態的變化,來呼叫不同狀態對應的不同功能。狀態決定行為。public inte ce votestate public class normalvotestate implements ...

Http狀態行和狀態碼介紹

1.狀態行包括3位數字的狀態碼和對狀態 的描述,下面將列出5種狀態碼的基本描述。1 1xx 1開頭的3位數 主要是實驗性質的。2 2xx 表明請求成功,如狀態碼200可以表明已成功取得了請求的頁面。3 3xx 表明在請求滿足之前應採取進一步的行動。4 4xx 當瀏覽器無法滿足請求時,返回該狀態碼,如...

狀態模式和策略模式

策略模式 商場 方案,可以有多種 買x返y,z折扣,積分,直降a。一次 活動可以只選擇其中的一種 策略,彼此之間沒有影響。狀態模式 乙個人一天的工作狀態 早上精神百倍,下午還好,晚上很累。早中晚各是一種狀態,但只有三種狀態聯合起來,才能完成 一天的狀態 這件事情,相當於把一天的狀態分成了三個部分了。...