温馨提示:此页面服务由第三方为您提供,交易前请仔细核对商家真实资质,勿信夸张宣传和承诺,勿轻易相信预付定金、汇款等交易方式; 此页面所发布文字及图片均由网民自行发布,如有侵权请联系发布者删除。
数控系统被锁怎么办有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。有限状态机成立的必要条件有:
对象有一组互斥的状态(或对象的生命周期),且这组状态可以涵盖对象的创建到消亡的整个过程。
当向对象传入一个信号(或事件)时,对象的状态能从当前状态转换成另一种状态,或者保持状态不变。
状态是有限的。
如图例所示,红绿灯在同一时间只能亮一个颜色,控制*可以定义3种不同的事件,每个事件定义好红绿灯的起始颜色和目标颜色,我们不需要直接去操作红绿灯开关,只需要按照一定的顺序发送事件过去,我们就可以精确控制红绿灯的工作,红绿灯的工作控制其实就是一个标准的FSM。
由上所述,FSM一般需要以下4个部分组成:
对象状态枚举。
对象事件枚举,并指定事件的起始状态和目标状态。
事件逻辑体,用于处理状态变更引起的业务逻辑。
事件注册工厂类,FSM的*入口。
2. 从需求开始分析FSM
当我们拿到一个类似需求时应该怎么入手呢?下面我们以一个简单的商城订单的FSM实现为例,从需求分析到代码实现为大家讲解:
首先我们应该从需求中提炼出一个订单具体需要经过哪些状态(这里我只列举了一个简单订单的正向状态)。
订单状态:待支付、待发货、待收货、已取消、已完成
列举出所有状态之后,在作图工具中把状态全部画出来,每个状态进行分析是否能转换为其他状态,如分析待支付状态,用户可以从待支付状态进行付款事件,待支付状态将会转换为待发货,用户也可以从待支付状态取消支付,待支付将会转换为订单取消状态。按照这个思路使用单向箭头将所有事件列举出来,并给每个事件起名字。
订单事件:下单事件、支付事件、发货事件、支付取消事件、收货事件
*形成如下图所示的状态流转图
3. FSM的java实现
按照上面所说,我们将FSM的4个部分声明出来:
3.1. 对象状态枚举类
使用枚举的方式穷举出订单所有可能的状态。
public enum OrderStatusEnum {
Unpaid("Unpaid", "待支付"),
UnShipping("UnShipping", "待发货"),
UnReceiving("UnReceiving", "待收货"),
Canceled("Canceled", "已取消"),
Finished("Finished", "已完成"); private final String code; private final String desc;
OrderStatusEnum(String code, String desc) { this.code = code; this.desc = desc;
} public String getCode() { return code;
} public String getDesc() { return desc;
}
}
苏ICP备09042555号-2 | 增值电信业务经营许可证:苏B2-20150120 | 公安部备案号:32020202000170 | Copyright © 无锡市新视点网络科技有限公司 版权所有
免费
报修
微信扫一扫
师傅
抢单
请先关注公众号
方便后期订单推送
图文
软件
138-6175-9787
关注
我们
公众号
顶部