java有限状态机

本文探讨了如何在处理字符串转整数问题时,通过状态机设计降低if-else和switch-case的复杂度,提升代码可维护性。作者以LeetCode第8题为例,对比传统方法和状态机在处理边界和状态转换上的差异,以及其在减少代码冗余上的优势。
摘要由CSDN通过智能技术生成

今天做到leetcode第8题——字符串转换整数,给一串不规则的字符串读取出其中的整数,博主想当然的用ifelse写出了相应代码,不过边界问题在一次次调试后才完善,觉得代码编写繁重且易出错,在看了官方解答之后才发现还有状态机可以用。一番查询后了解到一些需要用到大量复杂的if  else,switch case语句的情况,可以用有限状态机来降低程序的复杂性,提高代码可维护性,但是使用状态机的话子类会变多,造成类膨胀,两者的平衡需要开发者自己判断。

状态机,网上大多以电梯举例,可以很方便的查询到,就不再重复讲述了。

按我自己的理解,状态机就是在状态机在某个状态下,受到某个事件的推动,进入到另一个状态,当然状态和事件是关联的,不是任意的状态和事件组合都能触发状态转换。比如只有电梯处于停止运行,且电梯门处于关闭的状态下,电梯门才可以进行打开的动作,进入到电梯门打开的状态。

fig1

 以官方图解为例,字符串刚输入时,状态机就处于start状态,此状态下,若下一个接收的分割字符为空格,则状态依然为start,继续接收,收到number则进入in_number状态,然后再接收到空格、加减符号或other字符则进入end状态,其他情况类似。

编写代码,需要编写一个状态机类,然后不同状态的子类继承于这个类,(当然状态机少的话也可以直接创建),在这些子类中编写方法,来进行下一步的动作,调用另一个状态机子类。

具体可以参考EventBus-实现java状态机 - 简书 (jianshu.com)

相比网上大部分以电梯为例(都差不多,估计是转载或抄袭的),这一篇的代码更加的详细以及理解运作原理。

以后碰到复杂的if else、switch case问题,考虑使用状态机是否更加方便!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值