1. 程式人生 > 其它 >java列舉設計出狀態機

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);
    }
}