Java技巧-简单状态机编写

本文介绍了一种使用状态机实现循环任务进度控制的方法,通过定义固定状态值和实现增删查操作,确保任务在中断后能从正确的步骤继续执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近项目中需要对上传的接口进行顺序上传和步骤记录,所以这里编写一个状态机用例。

实战

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;
            }
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值