加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:34:55 所属栏目:Java 来源:网络整理
导读:我的应用程序中有多个实体,如用户,帐户,许可证等.每个实体都有与之关联的状态,如Active,Ok,Suspended,Unverified,PendingPayment,PendingApproval等.我想确保实体可以从预定义状态移动对于另一个用户只能从Ok移动到Suspended但不能从Unverified移动到Suspend
我的应用程序中有多个实体,如用户,帐户,许可证等.每个实体都有与之关联的状态,如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方法中,并且如果状态不正确,它也会抛出异常.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读