Java方法流状态设计
您好,我的代码将遵循一个序列过程 每一个可能的部分都有一个失败的情况 我想知道进程被哪个部分阻塞了。 因此,有一种状态需要知道进程在哪种方法上失败Java方法流状态设计,java,design-patterns,Java,Design Patterns,您好,我的代码将遵循一个序列过程 每一个可能的部分都有一个失败的情况 我想知道进程被哪个部分阻塞了。 因此,有一种状态需要知道进程在哪种方法上失败 public class MethodSequenceDesign { public static final int STATE_WAIT = 0; public static final int STATE_A_RUNNING = 1; public static final int STATE_A_FAIL = 2;
public class MethodSequenceDesign {
public static final int STATE_WAIT = 0;
public static final int STATE_A_RUNNING = 1;
public static final int STATE_A_FAIL = 2;
public static final int STATE_B_RUNNING = 3;
public static final int STATE_B_FAIL = 4;
public static final int STATE_C_RUNNING = 5;
public static final int STATE_C_FAIL = 6;
public static final int STATE_END = 7;
static int status = STATE_WAIT;
public void start() {
if (!methodA()) {
status = STATE_A_FAIL;
return;
}
if (!methodB()) {
status = STATE_B_FAIL;
return;
}
if (!methodC()) {
status = STATE_C_FAIL;
return;
}
status = STATE_END;
}
public boolean methodA() {
status = STATE_A_RUNNING;
String str = "do some operation in method A";
System.out.println(str);
return randomBoolean();
}
public boolean methodB() {
status = STATE_B_RUNNING;
String str = "do some operation in method B";
System.out.println(str);
return randomBoolean();
}
public boolean methodC() {
status = STATE_C_RUNNING;
String str = "do some operation in method C";
System.out.println(str);
return randomBoolean();
}
public static void main(String[] args) {
MethodSequenceDesign method = new MethodSequenceDesign();
method.start();
System.out.println("Final state = " + status);
}
public boolean randomBoolean() {
Random random = new Random();
return random.nextBoolean();
}
}
这里有我的示例代码:
我的问题是,是否有一种设计模式可以美化我的代码。状态,可能就是您在这里寻找的
编辑
针对特定问题的一种解决方案是将这些方法实现为lambda表达式,实现添加到集合类的接口,然后在集合上循环并执行每个方法,直到所有方法都已执行或其中一个返回失败状态。对于错误处理,请使用异常:
public class MethodSequenceDesign {
public void start() {
if (!methodA()) {
throw new RuntimeException("methodA failed");
}
if (!methodB()) {
throw new RuntimeException("methodB failed");
}
if (!methodC()) {
throw new RuntimeException("methodC failed");
}
}
public boolean methodA() {
String str = "do some operation in method A";
System.out.println(str);
return randomBoolean();
}
public boolean methodB() {
String str = "do some operation in method B";
System.out.println(str);
return randomBoolean();
}
public boolean methodC() {
String str = "do some operation in method C";
System.out.println(str);
return randomBoolean();
}
public static void main(String[] args) {
MethodSequenceDesign method = new MethodSequenceDesign();
try{
method.start();
} catch (Exception e) {
e.printStacktrace();
}
}
public boolean randomBoolean() {
Random random = new Random();
return random.nextBoolean();
}
}
请就这一问题提供具体答复。OP可以上网,所以他可以在谷歌上找到维基链接;链接不是答案,问题只是是否有设计模式可供使用,而不是如何实现。我想我已经给出了一个具体的答案,或者说是一个指向具体答案的指针。但这真的适合他的情况吗?他似乎并没有真的通过状态转换来改变行为,他只是在做错误处理。他真正应该做的可能是使用异常。谢谢。我有研究状态模式,但它不符合我的问题,我的过程是一步一步,我关心的是,如果我有10种或更多的方法来做类似的事情,是否有更好的方法来控制我的正常/失败状态。好的,因此,我误解了这个问题,即是否有一个已知的设计模式,但您对设计解决方案的要求更高,如果methodA、methodB和methodC在出现错误时抛出异常就更好了。您也可以自己指定异常,而不是向RuntimeException添加消息,例如,一种常见的方法是扩展RuntimeException。这在某些情况下很有帮助。