Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java方法流状态设计_Java_Design Patterns - Fatal编程技术网

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。这在某些情况下很有帮助。