狀態機模式實戰

2022-04-17 09:47:07 字數 917 閱讀 5192

最近在為澳洲一家保險公司做web應用,在乙個收集使用者位址資訊的頁面中,我遇到了乙個問題:

1.當使用者輸入正確的位址,通過驗證。

2.當使用者第一次輸入錯誤的位址,不通過。

3.當使用者第二次輸入,不論正確與否,都將通過。

當面對這樣的需求的時候,我立馬有了解決方案,首先要有乙個全域性變數來儲存他輸入的位址是否正確的boolean,然後還得有乙個session裡存放乙個位址變數,來比較位址是否改變。

由此可抽象出狀態類:

public

abstract

class

state

public

state

}}public

class retry extends

state else

}public

state

else

if(statecontext.isaddresschanged())}}

在設計好狀態類和如何切換狀態之後,狀態機container的具體實現如下:

public

class

statecontext

public

void

changestate(address address)

public

boolean

return

addressvalidator(address);

}}

如此簡單的幾個類就構成了狀態機的實現,方便處理了邏輯的轉化以及頁面跳轉的規則。state模式在實際使用中比較多,適合"狀態的切換".因為我們經常會使用if elseif else 進行狀態切換, 如果針對狀態的這樣判斷切換反覆出現,我們就要聯想到是否可以採取state模式了.

希望能對大家有幫助。

狀態機模式

狀態機又叫有限狀態機,它有 3 個部分組成 狀態 事件 動作。其中,事件也稱為轉移條件。事件觸發狀態的轉移及動作的執行。不過,動作不是必須的,也可能只轉移狀態,不執行任何動作。針對狀態機,有三種實現方式。第一種實現方式叫分支邏輯法。利用 if else 或者 switch case 分支邏輯,參照狀...

狀態機 狀態機0

近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術 個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不 是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...

python 狀態機 Python 狀態機

class statemachine def init self self.handlers 狀態轉移函式字典 self.startstate none 初始狀態 self.endstate 最終狀態集合 引數name為狀態名,handler為狀態轉移函式,end state表明是否為最終狀態 de...