java枚举设计出状态机

原理技术

package me.ele.marketing.budget.processor.helper;

import org.junit.Test;

import java.nio.ByteBuffer;

/**
 * @author: 谢洪伟
 * 2021/7/2 2:17 下午
 */
interface Context{
    ByteBuffer buffer();
    State state();

    void setState(State state);
}
interface State{
    boolean process(Context context);
}

public enum  Status implements State {
    XML {
        @Override
        public boolean process(Context context) {
            if (context.buffer().remaining() < 16) {
                return false;
            }
            // header 处理完 进入下一状态
            context.setState(ROOT);
            return true;
        }
    },ROOT {
        @Override
        public boolean process(Context context) {
            if (context.buffer().remaining() < 8) {
                return false;
            }
            // 处理 root 处理完进入终态
            context.setState(FINISHED);
            return true;
        }
    },FINISHED{
        @Override
        public boolean process(Context context) {
            return false;
        }
    };
    
    @Test
    public void m1() { 
        Context context = null;
        Status.XML.process(context);
    }
}


原文地址:https://www.cnblogs.com/albertXe/p/14963206.html