工作中乙個簡單的狀態機實現,總結如下。
定義狀態:
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 動作 條件滿足後執行的動作。動作不是必須的,當條件滿足後,也可以不執行任何動作,直...