当前位置:  开发笔记 > 编程语言 > 正文

如何将构建器模式与所有参数强制一起使用?

如何解决《如何将构建器模式与所有参数强制一起使用?》经验,为你挑选了1个好方法。

我有一个构建器模式,在该模式中,很可能所有参数都是必需的,因此我创建了一个长的构造函数,如下代码所示。

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

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



1> sstan..:

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

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

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


具有多个参数的构造函数不必看上去难看,这取决于您的代码格式。当时我的建议是将第一个参数与构造函数放在同一行,然后将其下的其余参数对齐。这不仅可以提高可读性(因为您可以在每个部分后面进行注释),而且可以简化代码,因为您不必在类中添加额外的“生成器”逻辑/代码等,并且最终用户可以使用自动完成功能他们的IDE以帮助完成构造函数。)
推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有