乙個簡單的狀態機總結

2021-09-01 22:05:25 字數 1346 閱讀 4314

工作中乙個簡單的狀態機實現,總結如下。

定義狀態:

public enum qstate

public int getcode() }

public enum vstate

public int getcode()

}public enum state

public int getcode()

public int getqcode()

public int getvcode()

}

定義事件:

public enum event
定義返回值:

public enum statechgcode

public class statechgret

public statechgcode getcode()

public state getnewstate()

@override

public string tostring()

}

獲取當前狀態:

public state getstate(int qstate, int vstate)

}else if (2 == qstate)

}throw new illegalstateexception("invalid qstate:" + qstate);

}

狀態變更(當前狀態+事件):

public statechgret statechg(state curstate, event event)

return ret;

}throw new illegalstateexception("param error!");

}

觸發操作方法,返回流轉後的狀態:

private statechgret onvorder(state curstate)

}//...

操作方法不一一列出,其它方法與onvendor()方法類似。

這個狀態機通過當前狀態currentstate及對應的事件event,獲取狀態返回值statechgret,statechgret類中包含了狀態是否可以流轉,以及流轉後的狀態是什麼。

但本狀態機與設計模式中的狀態模式其實關係不大,因為只是通過switch-case語句進行判斷而已(與if-else其實一樣)。

設計模式中的狀態模式定義:把不同狀態的操作分散到不同的狀態物件中去完成。

見我的另一篇blog:設計模式回顧之七:狀態模式(state)

OpenGL是乙個狀態機

顏色 紋理座標 源因子和目標因子 光源的各種引數,等等,這些都是狀態,所以這一句話就包含了上面敘述的所有內容。此外,是否啟用了光照 是否啟用了紋理 是否啟用了混合 是否啟用了深度測試 等等,這些也都是狀態,也符合上面的描述 opengl會保持狀態,除非我們呼叫opengl函式來改變它。取得openg...

人生就是乙個狀態機

從出生到死亡人生走的是乙個過程。從巨集觀來看,人分為幼年 青年 中年和老年 從微觀來看,人每天吃飯 睡覺 學習 工作和娛樂。古語有云 良田千傾不過一日三餐,廣廈萬間只睡臥榻三尺 沒必要我一己私利而貪得無厭。而我看來人生就如同乙個大型狀態機。人生的狀態機從大的方面看,它的輸入為時間,輸出為做出的成果,...

狀態機簡單介紹

可以把狀態機的要素分為4個要素,即 現態 條件 動作 次態。現態 和 條件 是因,動作 和 次態 是果。1 現態 是指當前所處狀態 2 條件 又稱為 事件 當條件被滿足時,將會觸發乙個動作,或者執行一次狀態的遷移。3 動作 條件滿足後執行的動作。動作不是必須的,當條件滿足後,也可以不執行任何動作,直...