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

标签 java state state-machine

我的应用程序中有多个实体,如用户、帐户、许可证等。每个实体都有一个与之关联的状态,如 Activity 、正常、暂停、未验证、待付款、待批准等。我想确保这些实体可以从一个预定义的状态到另一个像用户只能从 Ok 移动到 Suspended 但不能从 Unverified 移动到 Suspended。实现这个的最佳设计模式是什么?我环顾四周,主要是为此类问题找到状态机,但它们看起来太复杂了,因为我不想考虑状态中的事件。我只想限制状态的转换。

到目前为止,我可以考虑使用一个预填充的二维数组来定义每个维度中的所有状态并表示可能的转换。寻找任何更好的方法。

最佳答案

您可以在 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");

    }

}

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

关于java - 如何在java中为实体实现状态转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38230864/

相关文章:

Java:类类型不匹配

java - 实例变量为 null 时抛出的异常

SwiftUI:@State 值在异步网络请求后不会更新

c - 从循环内部切换状态机的状态

java - 我的猜谜游戏计数器不断上升

java - 使用 c2dm 时出现 SERVICE_NOT_AVAILABLE 错误

android:state_enabled 丢失/不工作?

css - 如何删除 :active state? 上的渐变

android - 从安卓代码生成状态机图

c++ - 状态机状态之间的通信