索引
意圖
允許乙個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了它的類。
結構
參與者
context
state
concretestate
在以下情況下可以使用 state 模式:
效果
相關模式
實現
實現方式(一):由 concretestate 指定它的後繼 state。
state 模式不指定哪乙個參與者定義狀態轉換規則。
如果該轉換規則是固定的,那麼它們可在 context 中完全實現。
然而若讓 state 子類自身指定它們的後繼狀態以及何時進行轉換,通常更為靈活。
這需要 context 增加乙個介面,可以顯示地設定 state。
這種實現的缺點是,乙個 state 子類至少擁有乙個其他子類的資訊,使子類間產生了依賴。
1namespace
statepattern.implementation126
public
abstract
void
handle(context context);7}
89public
class
context
1016
17public
void
setstate(state state)18"
, _state.name);21}
2223
public
void
request()
2427}28
29public
class
concretestatea : state
30 }
3233
public
override
void
handle(context context)
3440}41
42public
class
concretestateb : state
43 }
4546
public
override
void
handle(context context)
4753}54
55public
class
client
5665
}66 }
設計模式之狀態模式(State )
狀態模式是根據其狀態變化來改變物件的行為,允許物件根據內部狀態來實現不同的行為。內容類可以具有大量的內部狀態,每當呼叫實現時,就委託給狀態類進行處理。當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判...
設計模式之 十七 狀態模式State
由簡單的開始會比較好理解狀態模式的作用,先來看乙個例子,如果您有乙個只能順時針轉動的瓦斯開關,轉動一次的狀態為off small fire medium fire與large fire,您如何在程式中控制狀態的變化與行為呢?乙個最簡單的方式就是用if.else或是switch流程來控制,例如 這個方...
C 設計模式之 狀態模式(State)
當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類 狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以複雜的判斷邏輯簡化。abstract class state class concretestatea...