我有一个构建器模式,在该模式中,很可能所有参数都是必需的,因此我创建了一个长的构造函数,如下代码所示。
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
类使用普通的构造函数即可。