是否有一种模式可以根据Java中以前的结果执行一系列方法?

cmn*_*cmn 3 java

用例是有一组方法需要根据前一个是否已经返回来执行true.例如:

class Test {
    boolean method1() {...}
    boolean method2() {...}
    boolean method3() {...}

    ...

    void callAll() {
        if(method1()) {
             if(method2() {
                 if(method3() {
                     ...
                 }
             }
        } else {
            error();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

else所有的ifs 必须有一个.有没有更好的方法来处理这种情况?

Mic*_*nic 8

我会这样做:

void callAll(){
    if(method1() && method2() && method3()){
        // all passed
    } else {
        error();    
    }
}
Run Code Online (Sandbox Code Playgroud)

Java 使逻辑操作短路,&&因此此前方法中的故障将阻止运行下一个方法.

如果error()您需要知道哪些方法失败,您可以声明一个错误消息字段,用于在类中存储信息并将其值设置为与失败相对应:

private String errorMessage;

//...

boolean method2() {

    // something went wrong
    errorMessage = "Failed to do method2 stuff";
}
Run Code Online (Sandbox Code Playgroud)

更优雅的方式是实现相同的方法是使用责任链设计模式并将布尔方法封装在自己的处理程序对象中.但是,这样做需要对您当前拥有的代码进行更多重构,并提供有关特定用例的更多信息.