怎么制作网站开发设计,wordpress模版文件夹,优化的概念,沈阳模板建站代理状态机介绍
状态机#xff08;State Machine#xff09;是一种数学模型#xff0c;用于描述对象或系统在不同状态之间的转移和行为。它由一组状态、转移条件和动作组成#xff0c;可以根据输入条件从一个状态转移到另一个状态#xff0c;并执行相应的动作。
特点#x…状态机介绍
状态机State Machine是一种数学模型用于描述对象或系统在不同状态之间的转移和行为。它由一组状态、转移条件和动作组成可以根据输入条件从一个状态转移到另一个状态并执行相应的动作。
特点
离散性状态机是离散的它的状态和转移是离散的不涉及连续变化。易于理解和建模状态机可以直观地描述对象或系统的行为使得人们能够更好地理解和建模复杂的逻辑。可扩展性状态机可以轻松地添加新的状态和转移以适应需求的变化。灵活性状态机可以根据输入条件自动转移状态并执行相应的动作具有较高的灵活性和自动化能力。
使用场景
控制流程管理状态机可以用于控制流程中的状态转移例如工作流程管理、订单状态管理等。设备控制状态机可以用于描述设备的状态和状态转移例如自动售货机、电梯控制等。游戏开发状态机可以用于游戏中的角色状态管理例如角色的移动、攻击、防御等状态。自动化系统状态机可以用于自动化系统中的控制和决策例如智能家居系统、工业自动化等。
总之状态机是一种强大的工具在一些较复杂的场景下可以帮助我们描述和管理对象或系统的状态和行为提高代码的可理解性、可扩展性和灵活性。
状态机实现
一般情况下都是使用状态模式可以使用状态模式来实现状态机将每个状态封装成一个类通过状态之间的转换来实现状态机的功能有点类似于策略模式。
状态机中一般包含状态state以及行为handle通过行为改变状态并且此行为的结果是已知的。
案例假设需要开发一套流程其中
状态待处理、处理中、已处理、已评价。
行为创建、分配、领取、流转、跟进、办结、评价。
具体的状态流转是
行为前置状态后置状态创建无待处理分配待处理处理中领取待处理处理中流转处理中处理中跟进处理中处理中办结处理中已处理评价已处理已评价
其实从上面表格中也可以看出行为和状态之间必然的联系换成模型的话可以用一个二维数组来表示一维数组下标表示行为二位数组下标表示前置状态数组中的值表示后置状态。
使用表格表示
创建分配领取流转跟进办结评价待处理×处理中处理中××××处理中×××处理中处理中已处理×已处理××××××已评价已评价×××××××
具体代码实现
public enum StatusEnum {PENDING(待处理),PROCESSING(处理中),PROCESSED(已处理),EVALUATED(已评价);private String name;StatusEnum(String name) {this.name name;}public String getName() {return name;}
}public enum ActionEnum {CREATE(创建),ASSIGN(分配),RECEIVE(领取),TRANSFER(流转),FOLLOW_UP(跟进),FINISH(办结),EVALUATE(评价);private String name;ActionEnum(String name) {this.name name;}public String getName() {return name;}
}/*** 状态机*/
public class StateMachine {private static final StatusEnum[][] transitions {{null,StatusEnum.PROCESSING,StatusEnum.PROCESSING,null,null,null,null},{null,null,null,StatusEnum.PROCESSING,StatusEnum.PROCESSING,StatusEnum.PROCESSED,null},{null,null,null,null,null,null,StatusEnum.EVALUATED},{null,null,null,null,null,null,null}};public StatusEnum handle(StatusEnum status, ActionEnum action) {int statusIndex status.ordinal();int actionIndex action.ordinal();StatusEnum nextStatus transitions[statusIndex][actionIndex];if (nextStatus null) {throw new IllegalStateException(no valid action);}return nextStatus;}
}测试代码
public class StateMachineTest {public static void main(String[] args) {StateMachine stateMachine new StateMachine();// 当前状态待处理操作是分配得出下一步状态是处理中System.out.println(stateMachine.handle(StatusEnum.PENDING, ActionEnum.ASSIGN));// 当前状态已处理操作是分配为null即操作不当System.out.println(stateMachine.handle(StatusEnum.PROCESSED, ActionEnum.ASSIGN));}
}测试结果
PROCESSING
Exception in thread main java.lang.IllegalStateException: no valid actionat com.honor.wpshowdemo.serverone.example.StateMachine.handle(StateMachine.java:17)at com.honor.wpshowdemo.serverone.example.StateMachineTest.main(StateMachineTest.java:11)