|
大家好!我开始用状态机也有一段时间了,最近一直在思考搞一个状态机的模板出来,以前用基本都是随性,没有形成一个模板
但有些问题,需要大家指点一下。
1. 我现在都是用的是有限状态机FSM,但是在状态迁移比较复杂时,有不少的代码冗余,而且层次感有些乱,过一段时间,自己都有点晕
然后我在网上发现了HSM,也就说层次状态机,就有了类似于子类和父类的感觉,子类把一些共同的东西直接不处理交由父类处理,但没有找到具体的代码例子,谁可以给一个,
我先按自己的理解举一个例子吧
状态A_1, A_2, B_1 , B_2, B_3 A嵌套着B,且无论A是什么状态,B_3的执行代码是一样的
我之前都是这样写的- switch( status_A )
- {
- bool is_handle = true;
-
- case A_1:
- switch( status_B )
- {
- case B_1:
- break;
- case B_2:
- break;
- case B_3:
- fun1();
- break;
- default:
- break;
- }
- break;
- case A_2:
- switch( status_B )
- {
- case B_1:
- break;
- case B_2:
- break;
- case B_3:
- fun1();
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
复制代码 现在考虑父类和子类的观点,这样写- switch( status_A )
- {
- bool is_handle = true;
-
- case A_1:
- switch( status_B )
- {
- case B_1:
- break;
- case B_2:
- break;
- case B_3:
- is_handle = false;
- break;
- default:
- break;
- }
- break;
- case A_2:
- switch( status_B )
- {
- case B_1:
- break;
- case B_2:
- break;
- case B_3:
- is_handle = false;
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- if( is_handle == false )
- {
- fun1();
- }
复制代码 还有对于HSM,想体现出来的类的继承和多态的观念,大家怎么看??
2 . 状态机的entry/do/exit,用一个比较好的模板去实现,我以前是参考这个帖子的:http://www.amobbs.com/forum.php?mod=viewthread&tid=4520667&highlight=%E7%8A%B6%E6%80%81%E6%9C%BA
请大家畅所欲言,状态机啊 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|