什么是狀態(tài)機(jī):
狀態(tài)機(jī)的官方定義如下:
The intent of the STATE pattern is to distribute state-specific logic across classes that represent an object’s state.
狀態(tài)模式是為了將與狀態(tài)有關(guān)的邏輯分寫在代表對象狀態(tài)的類中,而狀態(tài)機(jī)會對傳入的狀態(tài)做出不同的響應(yīng)澜驮,代碼層面上表示為對不同類的調(diào)用账锹。
狀態(tài)機(jī)的四個要素:
State:狀態(tài)描验。一個狀態(tài)機(jī)至少要包含兩個狀態(tài)
Event:事件窗骑。事件就是執(zhí)行某個操作的觸發(fā)條件或者口令
Action:動作凛忿。事件發(fā)生以后要執(zhí)行動作
Transition:變換枷遂。也就是從一個狀態(tài)變化為另一個狀態(tài)樱衷。指的是兩個狀態(tài)之間的一種關(guān)系,表明對象在第一個狀態(tài)中執(zhí)行一定的動作酒唉,并將在某個事件發(fā)生同時某個特定條件滿足時進(jìn)行第二個狀態(tài)矩桂。
有哪些狀態(tài)機(jī):
參考:https://blog.csdn.net/varyall/article/details/103090043
舉個栗子:
電商系統(tǒng)中,單個訂單往往涉及多個狀態(tài)的變化痪伦,下單侄榴,支付 ,發(fā)貨网沾,簽收癞蚕,退換貨等。每個狀態(tài)的改變需要不同的業(yè)務(wù)代碼對數(shù)據(jù)庫做出相應(yīng)的修改辉哥。這種場景下桦山,狀態(tài)機(jī)模式的使用就能讓取代很多if else讓代碼更好維護(hù),邏輯更加清晰。
寫個Demo:
一個電商系統(tǒng)的小demo
枚舉類:
狀態(tài)管理流轉(zhuǎn)方法
取消訂單operator
取消訂單processor