缺點
環境角色(context)
/**
* 使用環境(context)角色:客戶程式是通過它來滿足自己的需求。它定義了客戶程式需要的介面;並且維護乙個具體狀態角色的例項,這個例項來決定當前的狀態。
* 由自身的狀態決定自身的行為。
* * @author yanbin
* */
public
class
context
// 設定初始狀態
public
void
setstate
(state state)
// 下一步
public
void
nextstep()
}// 上一步
public
void
laststep()
}// 返回當前狀態
public state getstate()
}
狀態角色(state)/**
* * @author yanbin
* */
public
inte***ce
state
具體狀態角色(concretestate)/**
* 具體狀態(concrete state)角色:實現狀態角色定義的介面。
* * @author yanbin
* */
public
class
firststate
implements
state
// first->second
public
void
nextstep
(context ctx)
@override
public string tostring()
}
/**
* 具體狀態(concrete state)角色:實現狀態角色定義的介面。
* * @author yanbin
* */
public
class
secondstate
implements
state
// second->third
public
void
nextstep
(context ctx)
@override
public string tostring()
}
/**
* 具體狀態(concrete state)角色:實現狀態角色定義的介面。
* * @author yanbin
* */
public
class
thirdstate
implements
state
// third->null
public
void
nextstep
(context ctx)
@override
public string tostring()
}
客戶端/**
* 狀態模式:允許乙個物件在其內部狀態改變時改變它 的行為。狀態模式可以有效的替換充滿在程式中的 if else
* 語句:將不同條件下的行為封裝在乙個類裡面,再給這些類乙個統一的父類來約束他們。
* 組成:使用環境(context)角色;狀態(state)角色;具體狀態(concrete state)角色。
* 使用場景:乙個物件的行為取決於它的狀態, 並且它必須在執行時刻根據狀態改變它的行為。乙個操作中含有龐大的多分支的條件語句,且這些分支依賴於該物件的狀態。
* 狀態模式和策略模式的區別:區分這兩個模式的關鍵是看行為是 由狀態驅動還是由一組演算法驅動;策略模式用來處理演算法變化,而狀態模式則是處理狀態變化。
* 策略模式中,演算法是否變化完全是由客戶程式來決定的,而且往往一次只能選擇一種算 法,不存在演算法中途發生變化的情況。
* 而狀態模式如定義中所言,在它的生命週期中存在著狀態的轉變和行為得更改,而且狀 態變化是乙個線形的整體;對於客戶程式來言,這種狀態變化往往是透明的。
* * @author yanbin
* */
public
class
statepattern
system.out.
print
("->");
// 順流
ctx.
nextstep()
;}system.out.
println(""
);// 逆行起點third
state =
newthirdstate()
; ctx =
newcontext
(state)
;for
(int i =
0; i <
6; i++
) system.out.
print
("->");
// 逆流
ctx.
laststep()
;}}}
Java設計模式 狀態模式
目錄 定義如下 個人理解 通用類圖 角色介紹 state 抽象狀態角色 concretestate 具體狀態角色 context 環境角色 通用源 場景類 狀態模式的優點 狀態模式的缺點 使用場景 狀態模式又是乙個比較難的設計模式 當乙個物件內在狀態改變時允許其改變行為,這個物件看起來像改變了其類。...
設計模式 狀態模式 Java
狀態模式 state 當乙個物件的內在狀態改變時允許改變其行為。這個物件看上去就像是改變了它的類一樣。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。狀態模式的好處 將與特定狀態相關的行為區域性化,並...
Java設計模式 狀態模式
當乙個物件的內在狀態改變時允許改變其行為,對這個物件看起來像是改變了其類。狀態模式的uml圖如下 context 環境類,定義客戶感興趣的解耦,維護乙個states子類的例項,這個實力定義了物件當前的狀態。state 抽象狀態類或者狀態介面,定義乙個或一組介面,表示改狀態下的行為。concrete ...