今天做编辑器的各种按键对应操作.listener使用了前些天的状态机.做的过程中发现了该状态机的缺点.无法跟踪过去的状态.比如希望能够根据曾经按过的最近3个按键判断对应哪个操作.当然总是是可以保存在一张链表或什么东西里的.但这样的话状态机相当于退化了.公车想到了这是个马尔可夫链相关的问题.回来google之,有基于马尔可夫链的状态机,多是作为一种概率状态机.比如搜索算法,语言翻译都会用到.备忘之.
对应于同一个事件,当前状态只能跳到唯一状态,局限性大,这样还是需要if-else来依据别的条件(如之前的2个状态)来判断,希望能避免这个.
另外,每个状态强制分为begin, on, end阶段写的时候很痛苦,很多情况其实只需要到一个阶段就够了.或许是业务本来就很简单吧.
这是一系列类型的类型.可能需要类型容器.如果用枚举集合的话,仍然避免不了判断.然后,这似乎就是s1; s1,s2; s1,s2,s3的组合.如果把状态组合列出,分别给予处理,似乎又会导致复杂化.不过就是把多个flag或运算成一个flag,可能会让人摸不着.