什么是状态机:
状态机的官方定义如下:
The intent of the STATE pattern is to distribute state-specific logic across classes that represent an object’s state.
状态模式是为了将与状态有关的逻辑分写在代表对象状态的类中,而状态机会对传入的状态做出不同的响应,代码层面上表示为对不同类的调用。
状态机的四个要素:
State:状态。一个状态机至少要包含两个状态
Event:事件。事件就是执行某个操作的触发条件或者口令
Action:动作。事件发生以后要执行动作
Transition:变换。也就是从一个状态变化为另一个状态。指的是两个状态之间的一种关系,表明对象在第一个状态中执行一定的动作,并将在某个事件发生同时某个特定条件满足时进行第二个状态。
有哪些状态机:
参考:https://blog.csdn.net/varyall/article/details/103090043
举个栗子:
电商系统中,单个订单往往涉及多个状态的变化,下单,支付 ,发货,签收,退换货等。每个状态的改变需要不同的业务代码对数据库做出相应的修改。这种场景下,状态机模式的使用就能让取代很多if else让代码更好维护,逻辑更加清晰。
写个Demo:
一个电商系统的小demo
枚举类:
状态管理流转方法
取消订单operator
取消订单processor