У меня есть шаблон строителя, в котором, скорее всего, все мои параметры будут обязательными, поэтому я создал длинный конструктор, как показано ниже в коде.Как использовать шаблон строителя со всеми параметрами как обязательный?
public final class ResponseHolder {
// all below six are related to response information
private final String response;
private final boolean isLinking;
private final TypeHold typeOfId;
private final long userTimeInMs;
private final long userLmdInDays;
private final String maskInfo;
// below two are related to error handling
private final ErrorCode error;
private final StatusCode status;
private ResponseHolder(Builder builder) {
this.response = builder.response;
this.isLinking = builder.isLinking;
this.typeOfId = builder.typeOfId;
this.userTimeInMs = builder.userTimeInMs;
this.userLmdInDays = builder.userLmdInDays;
this.maskInfo = builder.maskInfo;
this.error = builder.error;
this.status = builder.status;
}
public static class Builder {
protected final String response;
protected final TypeHold typeOfId;
protected final String maskInfo;
protected final ErrorCode error;
protected final StatusCode status;
protected final boolean isLinking;
protected final long userTimeInMs;
protected final long userLmdInDays;
public Builder(String response, TypeHold typeOfId, String maskInfo, ErrorCode error,
StatusCode status, boolean isLinking, long userTimeInMs, long userLmdInDays) {
this.response = response;
this.typeOfId = typeOfId;
this.maskInfo = maskInfo;
this.error = error;
this.status = status;
this.isLinking = isLinking;
this.userTimeInMs = userTimeInMs;
this.userLmdInDays = userLmdInDays
}
public ResponseHolder build() {
return new ResponseHolder(this);
}
}
// getters here
}
Теперь я смущаюсь, когда все параметры являются обязательными, то как это может быть полезно? Есть ли лучший способ представить мой шаблон выше Builder? Может ли логическая группировка параметров передаваться в их собственные классы, чтобы уменьшить количество параметров, передаваемых конструктору строителя?
Несмотря на то, что отдельные объекты упрощают вещи совсем немного, это также затрудняет работу, если вы не знакомы с кодом. Единственное, что я могу сделать, это переместить все параметры в свои собственные методы addParam(param)
, а затем выполнить проверку по требуемым параметрам в методе build()
во время выполнения?
Что мне лучше всего подходит, и есть ли лучший подход, который я могу использовать здесь?
Вы задали тот же вопрос вчера, я не уверен, почему бы его попросить снова. – YoungHobbit
Я бы даже не назвал это шаблоном строителя. Ответ @Andreas, как строители, как правило, пишут. –
Дэвид, если бы мой ответ не удовлетворял вас (ссылаясь на ваш предыдущий вопрос, на который я ответил), вы можете прокомментировать мой ответ, позволив мне обновить свой ответ, чтобы он лучше соответствовал вашей ситуации. Но вы не прокомментировали мой ответ, вы не обратили на него внимания, затем решили написать новый вопрос. Не круто –