定 義:當一個對象内在狀态改變時允許其改變行文,這個對象看起來像改變了其類
優 點:
1、結構清晰,避免了過多的switch case,if else
2、遵循設計原則,每個狀态都是一個子類
3、封裝性非常好
缺 點:子類會過多,也就是類膨脹
應用場景:
1、行為随狀态改變而改變的場景
2、條件、分支判斷語句的替代者
應用案例:
先來看看實際的狀态模式UML圖:
Status:抽象狀态角色,接口或抽象類,負責對象狀态定義,并且封裝環境角色以實作狀态切換
ConcreteState:具體狀态角色,每一個具體狀态必須完成兩個職責,本狀态的行為管理以及趨向狀态處理,通俗的說就是本狀态下要做的事情以及本狀态如何過渡到其他狀态
Context:環境角色,環境角色有兩個不成文的限制,1、把狀态獨享聲明為靜态常量,有幾個狀态對象就聲明幾個靜态常量