和策略模式很像,都是把具體行為委託給其他類來完成,不同的是,在策略模式中,你要替換行為,需要指定,但是在狀態模式裡,內部自動會進行替換,你都無法察覺。
怎麼做到的,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.定義狀態...