编程语言
首页 > 编程语言> > 如何在java中实现实体的状态转换?

如何在java中实现实体的状态转换?

作者:互联网

我的应用程序中有多个实体,如用户,帐户,许可证等.每个实体都有与之关联的状态,如Active,Ok,Suspended,Unverified,PendingPayment,PendingApproval等.我想确保实体可以从预定义状态移动对于另一个用户只能从Ok移动到Suspended但不能从Unverified移动到Suspended.实现这个的最佳设计模式是什么?我环顾四周,大多数时候都会找到状态机来解决这些问题,但它们看起来太复杂了,因为我不想考虑该州的事件.我想要限制的只是国家的过渡.

截至目前,我可以考虑使用预先填充的2D数组来定义每个维度中的所有状态并表示可能的转换.寻找更好的方法.

解决方法:

您可以在JPA枚举类型中使用.看看下面的链接.
http://tomee.apache.org/examples-trunk/jpa-enumerated/README.html

public enum State {
    STATE1,STATE2(STATE1),STATE3(STATE1,STATE2);

    private State[] previousStates;

    private State(){

    }
    private State(State ...state) {
        this.previousStates =state;
    }

    public State transition(State state) throws Exception {
        for(State tmp: state.previousStates) {
            if (this == tmp) {
                return state;
            }
        }
        throw new Exception("Illegal state");

    }

}

通过在Enum中实现方法转换,您将能够轻松地为JPA中的枚举设置新值,您可以将此调用隐藏到set方法中,并且如果状态不正确,它也会抛出异常.

标签:state-machine,java,state
来源: https://codeday.me/bug/20190727/1554600.html