我想在JPA中实现状态设计模式。我目前正在做这件事的方式在这个blog post列出。如何在JPA域模型中实现状态设计模式
作者使用包含所有可用状态实现的枚举,而不是为每个状态的状态抽象和写实现创建抽象类/接口。我发现这种方法非常有用,因为枚举可以在JPA中轻松地序列化,并且可以无需额外工作就可以存储对象的当前状态。我还将状态接口和所有状态类嵌套到枚举中,使其成为私有的,因为它们是特定于实现的,并且不应该对任何客户端可见。这里是一个枚举的代码示例:
public enum State {
STATE_A(new StateA()),
STATE_B(new StateB());
private final StateTransition state;
private State(StateTransition state) {
this.state = state;
}
void transitionA(Context ctx) {
state.transitionA(ctx);
}
void transitionB(Context ctx) {
state.transitionB(ctx);
}
private interface StateTransition {
void transitionA(Context ctx);
void transitionB(Context ctx);
}
private static class StateA implements StateTransition {
@Override
public void transitionA(Context ctx) {
// do something
ctx.setState(STATE_B);
}
@Override
public void transitionB(Context ctx) {
// do something
ctx.setState(STATE_A);
}
}
private static class StateB implements StateTransition {
@Override
public void transitionA(Context ctx) {
throw new IllegalStateException("transition not allowed");
}
@Override
public void transitionB(Context ctx) {
// do something
ctx.setState(STATE_A);
}
}
}
我想和你分享这个,并得到你的想法。你觉得这有用吗?你将如何在JPA域模型中实现状态设计模式?
感谢, 西奥