Over Engineered h2>
abstract class Filter {
public static String errorMsg = null;
public abstract boolean check();
}
class CheckError extends Filter {
@Override
public boolean check() {
return (errorMsg != null);
}
}
abstract class DoBunchOfStuff {
public String somethingElse = null;
private static int counter = 0;
public DoBunchOfStuff() {
somethingElse = "doBunch" + ++counter;
}
public abstract void ofStuff(Filter filter);
}
class Follower {
private Filter filter;
private List stuff = new ArrayList<>();
public Follower(Filter filter) {
this.filter = filter;
}
public void add(DoBunchOfStuff bunchOf) {
stuff.add(bunchOf);
}
public String call() {
for (DoBunchOfStuff doBunch : stuff) {
doBunch.ofStuff(filter);
if (filter.check()) {
return filter.errorMsg + doBunch.somethingElse;
}
}
return "OK";
}
}
public class YourClass {
public String myMethod() {
Follower executor = new Follower(new CheckError());
DoBunchOfStuff doBunch1 = new DoBunchOfStuff() {
@Override
public void ofStuff(Filter filter) {
//
}
};
DoBunchOfStuff doBunch2 = new DoBunchOfStuff() {
@Override
public void ofStuff(Filter filter) {
//
}
};
DoBunchOfStuff doBunch3 = new DoBunchOfStuff() {
@Override
public void ofStuff(Filter filter) {
//
filter.errorMsg = "Error !!! ";
}
};
executor.add(doBunch1);
executor.add(doBunch2);
executor.add(doBunch3);
return executor.call();
}