gpt4 book ai didi

java - 如何使用所有参数都为强制性的构建器模式?

转载 作者:行者123 更新时间:2023-12-04 14:33:18 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to avoid making long constructors [duplicate]

(3 个回答)



Elegant alternatives for huge amount of arguments in class constructor [closed]

(4 个回答)


5年前关闭。




我有一个构建器模式,其中很可能我的所有参数都将是强制性的,因此我创建了一个长构造函数,如下面的代码所示。

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() 中的所需参数执行验证运行时的方法?

我应该在这里遵循的最佳实践是什么,我可以在这里使用什么更好的方法?

最佳答案

当有 时,Builder 模式会发光许多 允许您创建对象的不同有效参数排列。如果没有 Builder 模式,您将被迫创建许多丑陋且令人困惑的构造函数来处理所有可能的有效参数组合。

但在你的情况下,只有 允许您创建对象的有效参数集。这正是构造函数的用途。在这里使用 Builder 模式不仅是矫枉过正,而且根本不合适。

只需为您的 ResponseHolder 使用普通的构造函数即可类(class)。

关于java - 如何使用所有参数都为强制性的构建器模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34468660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com