主要解決由於狀態不同而導致物件行為發生複雜變化(特別是多種行為發生變化),這時候如果僅通過if來處理,會使**複雜度不可控。我們保以認為strategy模式更多的是解決不同狀態下,單行為的變化;而state-pattern則是解決不同狀態下多行為的變化。
如果乙個物件在不同的狀態下,需要表現出不同的行為,這時候我們可以採用狀態模式。乙個非常經典的應用場景是狀態機,它可以很好地描述狀態機的變化;例如我們經常學到的電梯控制邏輯。
state:狀態介面,定義多種行為介面,當然也可以處理一種行為,如上原理圖
以以下背景為例:
工人一日三餐,餐餐不同。
public inte***ce mealstate
public class breakfaststate implements mealstate
public void eat
() }
public class lunchstate implements mealstate
public void eat
() }
public class dinnerstate implements mealstate
public void eat
() }
@allargsconstructor
public class worker
public static void main
() }
複製**
狀態模式(State Pattern)
狀態模式 允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類 當控制乙個物件狀態轉換的條件表示式過於複雜時,把狀態的判斷邏輯轉移至表示不同狀態的一系列類中 我們來看一下自動售票機的使用場景 圓圈表示自動售票機所處的狀態 箭頭線表示乘客的操作 也是自動售票機從乙個狀態切換到另乙個狀態所需...
狀態模式 State Pattern
細想狀態變更的實質就是乙個狀態與狀態二維的關係表。電梯例子,通過狀態的變化形成二維的 電梯門關閉 電梯門開啟 電梯上下運載 電梯停止。如果通過乙個個遍歷狀態通過if esle 完成 不利於 維護。電梯門關了再開啟,逗你玩呢,那這個允許呀 override public void open 電梯門關了...
狀態模式 StatePattern
狀態介面 inte ce istate 狀態ausing system class askpay istate region istate 成員 public void do public void undo endregion 狀態busing system class auditingfaile...