定義(百度百科): 當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。 UML類圖: 具體代碼: 模塊說明: Context:它定義了客戶需要的介面並維護一個具體狀態角色(State)的實例,將與狀態相關的操作交給當前的ConcreteState對象來處理 State:定義一個 ...
定義(百度百科):
當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。
UML類圖:
具體代碼:
public abstract class State { public abstract void handle(); } public class ConcreteState extends State { @Override public void handle() { } } public class ConcreteState extends State { @Override public void handle() { } }
模塊說明:
Context:它定義了客戶需要的介面並維護一個具體狀態角色(State)的實例,將與狀態相關的操作交給當前的ConcreteState對象來處理
State:定義一個介面以封裝使用Context的的一個特定狀態相關的行為
ConcreteState:實現抽象狀態State的具體實例
適用場景:
對象狀態的改變將導致行為的變化。
代碼中包含非常多狀態判斷的語句,導致客戶類與類庫之間的耦合增強
優缺點:
優點:
簡化應用邏輯控制(對狀態的控制)
更好的區分狀態和行為
缺點:
狀態模式的使用必然會增加系統中ConcreteState的個數,導致系統運行開銷增大
總結:
根據狀態分離和選擇行為