概述
前言
最近项目中需要对上传的接口进行顺序上传和步骤记录,所以这里编写一个状态机用例。
实战
public class StatusMachine {
//重点1:状态值是固定的写法
@Retention(RetentionPolicy.SOURCE)
public @interface Satus{
int STEP1 = 0x000001;
int STEP2 = 0x000002;
int STEP3 = 0x000004;
int STEP4 = 0x000008;
int STEP5 = 0x000010;
int STEP6 = 0x000020;
int STEP7 = 0x000040;
int STEP8 = 0x000080;
....
}
private int status;
/**
*
* 是否有此状态
*
* @param value 保存当前状态
*/
private boolean hase(int value) {
return (status & value) != 0;
}
/**
* 移除一个状态
*
* @param value
*/
private void remove(int value) {
status &= ~value;
}
/**
* 存储状态
* @param value
*/
private void add(int value) {
status |= value;
}
/**
* 清楚当前状态
*/
private void clear(){
status = 0;
}
public static void main(String[] args)
{
StatusMachine statusMachine = new StatusMachine();
//add
statusMachine.add(Satus.STEP1);
statusMachine.add(Satus.STEP2);
//remove
statusMachine.remove(Satus.STEP1);
//query
System.out.println("Step1 has:"+statusMachine.hase(Satus.STEP1));
System.out.println("Step2 has:"+statusMachine.hase(Satus.STEP2));
}
}
1.注意状态值的编写,状态从1248依次重复进位添加。
2.状态方法为增删查,使用语言计算符号进行计算判断。
用例
需求
假如我们有一个后台常驻服务用于循环执行任务。记录每一个执行过的步骤,若中途中断,下次任务循环不执行当前进度中所执行的任务。
main{
while (true) {
if (!statusMachine.hase(Status.STEP1)) {
//do step1....
statusMachine.add(Status.STEP1);
}
if (!statusMachine.hase(Status.STEP2)) {
//do step2....
statusMachine.add(Status.STEP2);
}
//...
if (!statusMachine.hase(Status.FINISH)){
statusMachine.clear();
break;
}
}
}
最后
以上就是机智小馒头为你收集整理的Java技巧-简单状态机编写的全部内容,希望文章能够帮你解决Java技巧-简单状态机编写所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复