Скороговорка строителя может помочь. Если вы определяете класс, такой как
class Compute {
private final Function function;
public Compute(Function function) {
this.function = function;
}
public Compute count(){
// your code
}
}
, вы можете создать конструктор, такой как
public class ComputeBuilder {
private final Computation computation;
public ComputeBuilder addFunction(Function function) {
computations.add(new Computation(function))
}
public ComputeBuilder addComputation(Computation computation) {
computations.add(computation)
}
public Computation build(int iteration) {
Computation result;
for (int index = 0 ; index < iteration; index++ ) {
if (index > 0) {
result = result.count();
}
result = computation.count();
}
return result;
}
}
, и, в конце концов, это конструктор, который вы можете использовать многократно, не переписывая его. Надеюсь, это поможет.