Допустим, я хочу создать экземпляр следующего объекта:
private class ComplexObject {
private int param1; // Required Parameter
private int param2; // Required Parameter
private int param3; // Required Parameter
private List<Integer> listParam4; // This list should contain atleast one Integer
private ComplexObject() {
this.listParam4 = new ArrayList<Integer>();
}
}
Я пытаюсь использовать шаблон Step Builder для создания этого объекта, чтобы пользователь устанавливал значение параметровс целью.Основная проблема, с которой я сталкиваюсь, заключается в создании интерфейса для последнего шага.Я хочу раскрыть метод build()
после того, как пользователь предоставил хотя бы одно целое число, которое я могу добавить в listParam4
.В то же время я также хочу дать пользователю возможность предоставить больше целых чисел для добавления в список перед вызовом метода build()
.Я был бы очень признателен, если бы кто-то мог предоставить мне способ сделать это или предложить альтернативный подход в случае, если я подхожу к этой проблеме неправильно.
Вот код, который мне в настоящее время необходим для достижения этой цели:
public interface SetParam1Step {
SetParam2Step setParam1(int param1);
}
public interface SetParam2Step {
SetParam3Step setParam2(int param2);
}
public interface SetParam3Step {
AddToParam4ListStep setParam3(int param3);
}
public interface AddToParam4ListStep {
// Not sure how to create this interface
}
public static class ComplexObjectBuilder implements SetParam1Step, SetParam2Step, SetParam3Step, AddToParam4ListStep {
private int param1;
private int param2;
private int param3;
private List<Integer> listParam4;
private ComplexObjectBuilder() {
// Prevent Instantiation
}
@Override
public AddToParam4ListStep setParam3(int param3) {
this.param3 = param3;
return this;
}
@Override
public SetParam3Step setParam2(int param2) {
this.param2 = param2;
return this;
}
@Override
public SetParam2Step setParam1(int param1) {
this.param1 = param1;
return this;
}
// Needs to implement the build() method and the methods that would eventually be added to the AddToParam4ListStep interface.
public static SetParam1Step newInstance() {
return new ComplexObjectBuilder();
}
}