設計模式 狀態模式

2021-06-29 00:45:11 字數 3104 閱讀 4713

和策略模式很像,都是把具體行為委託給其他類來完成,不同的是,在策略模式中,你要替換行為,需要指定,但是在狀態模式裡,內部自動會進行替換,你都無法察覺。

怎麼做到的,context(上下文是乙個類,擁有一些內部狀態)因為它在委其他類完成任務後,會轉換上下文的狀態。

概念:上下文,自己的理解,本身是乙個類,但是擁有其他的物件引用,就像乙個大鍋,什麼都往裡裝。不同的情景下,裝的東西不一樣。

定義 狀態模式:允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。

這裡的物件是上下文,狀態改變,就呼叫不同的物件,所以看起來似乎呼叫的是同乙個方法,但委託的是不同的狀態物件。

狀態介面

public

inte***ce

state

extends

serializable

public

class

hasquarterstate

implements

state

@override

public

void

insertquarter()

@override

public

void

ejectquarter()

@override

public

void

turncrank() else

}@override

public

void

dispense()

}public

class

noquarterstate

implements

state

@override

public

void

insertquarter()

@override

public

void

ejectquarter()

@override

public

void

turncrank()

@override

public

void

dispense()

}public

class

soldoutstate

implements

state

@override

public

void

insertquarter()

@override

public

void

ejectquarter()

@override

public

void

turncrank()

@override

public

void

dispense()

}public

class

soldstate

implements

state

@override

public

void

insertquarter()

@override

public

void

ejectquarter()

@override

public

void

turncrank()

@override

public

void

dispense() else

}}public

class

winnerstate

implements

state

@override

public

void

insertquarter()

@override

public

void

ejectquarter()

@override

public

void

turncrank()

@override

public

void

dispense() elseelse}}

}上下文

public

class

gumballmachine

extends

unicastremoteobject

implements

gumballmachineremote

}public

void

insertquarter()

public

void

ejectquarter()

public

void

turncrank()

public

void

setstate(state state)

public

void

releaseball()

}public state getsoldoutstate()

public state getnoquarterstate()

public state gethasquarterstate()

public state getsoldstate()

public state getstate()

public

intgetcount()

public state getwinnerstate()

public

void

setwinnerstate(state winnerstate)

public string getlocation()

}客戶端

public

class

gumballmachinetestdrive catch (exception e) }}

設計模式 狀態模式

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

設計模式 狀態模式

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

設計模式 狀態模式

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