狀態模式 java實現

2021-08-11 12:02:29 字數 2278 閱讀 1496

工作時,上午狀態好

,中午想睡覺

,加班苦煎熬

;其實這是一種狀態的變化

,不同的時間

,會有不同的狀態

.public

classwork1else

if(hour

<13)else

if(hour

<17)elseelseelseelse{

//超過12點,則進入中午工作狀態

w.setstate(newnoonstate());

w.writeprogram();

public

classnoonstateextendsstate {

public

voidwriteprogram(work2

w) {

if(w.gethour()<13) {

system.out

.println("當前時間"+w.gethour()+"吃飯午休,又餓又困");

public

classwork2 {

privatestate

state;

//通過構造器,定義工作的初始狀態

publicwork2(state

state) {

this.state=state;

private

inthour;

private

booleanfinish=false;

//用於讀取當前狀態或者設定新狀態

publicstate getstate() {

returnstate;

public

voidsetstate(state

state) {

this.state = state;

public

intgethour() {

returnhour;

public

voidsethour(inthour) {

this.hour = hour;

public

booleanisfinish() {

returnfinish;

public

voidsetfinish(booleanfinish) {

this.finish = finish;

public

voidwriteprogram() {

//其子類對請求做處理,並設定一下狀態

state.writeprogram(this);

狀態模式的好處:

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

.將特定狀態相關的行為放在乙個類中

,通過增加新的類可以很容易的實現新的狀態和轉換

.說白了

,這樣做的目的可以消除龐大的條件分支語句

,狀態模式通過把各種狀態轉移邏輯分布到

state

和子類之間

,來減少相互的依賴.

何時使用狀態模式?

當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時

,就可以考慮使用狀態模式

.另外如果業務需求某項業務有多個狀態

,狀態的變化都是依靠大量的分支判斷語句來實現

,此時應該考慮為每一種業務狀態定義為乙個

state

的子類.

java狀態模式

參考 狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。使用前提 狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。使用好處 將與特定狀態相關的行為區域性化,並且將不同狀...

java狀態模式

參考 狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。使用前提 狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。使用好處 將與特定狀態相關的行為區域性化,並且將不同狀...

Java設計模式 狀態模式

目錄 定義如下 個人理解 通用類圖 角色介紹 state 抽象狀態角色 concretestate 具體狀態角色 context 環境角色 通用源 場景類 狀態模式的優點 狀態模式的缺點 使用場景 狀態模式又是乙個比較難的設計模式 當乙個物件內在狀態改變時允許其改變行為,這個物件看起來像改變了其類。...