Java:构建器模式与逻辑分组对象

Java:构建器模式与逻辑分组对象,java,coding-style,parameters,constructor,builder-pattern,Java,Coding Style,Parameters,Constructor,Builder Pattern,我读过关于如何在java中拆分大型构造函数的文章。但我不太确定我该怎么办。这个问题表明,构建器模式是更好的方法,但同时,某个子句中的一个人说“只有在某些参数是可选的情况下”。因为我的所有参数都是强制性的,所以我看不到构建器模式的任何优势。我只会冒着忘记传递重要信息的风险。因此,这是我创建新的逻辑分组对象的唯一选择,还是我在构建器模式中遗漏了一些重要的事实?建筑商似乎只有在东西可能丢失的情况下才是好的 “因此,这是我创建新的逻辑分组对象的唯一选项,还是我在构建器模式中遗漏了一些重要事实?” 我的意

我读过关于如何在java中拆分大型构造函数的文章。但我不太确定我该怎么办。这个问题表明,构建器模式是更好的方法,但同时,某个子句中的一个人说“只有在某些参数是可选的情况下”。因为我的所有参数都是强制性的,所以我看不到构建器模式的任何优势。我只会冒着忘记传递重要信息的风险。因此,这是我创建新的逻辑分组对象的唯一选择,还是我在构建器模式中遗漏了一些重要的事实?建筑商似乎只有在东西可能丢失的情况下才是好的

“因此,这是我创建新的逻辑分组对象的唯一选项,还是我在构建器模式中遗漏了一些重要事实?”

我的意见是:

对。与抽象中所需的工作量相比,在这种情况下使用builder不会带来额外的好处


注释中还提到:如果对象的参数太多,则可能该对象做的太多。

即使所有参数都是必需的,生成器模式仍有一些优点:

  • 它更具可读性。如果你的构造函数有十个参数,那就很难了 记住哪个是哪个是哪个,特别是如果很多是 0或null

  • 构建器可以传递给多个不同的方法来 积累所需的数据。如果某些数据 存在于一个类中,有些存在于另一个类中

  • 如果某些参数是需要 在交付给建造商之前进行组装 建筑商可以在内部处理这个问题。它们还可以消除 有些需要防御性拷贝,因为建设者知道这一点 它不会泄漏任何这些物体

  • 生成器可以用作序列化代理,为您提供更多 控件的序列化形式或JAXBXML形式 反对


  • 也就是说,我的方法总是从一个简单的构造函数开始,只有在调用构造函数会导致代码混乱,并且生成器增加的额外清晰度足以证明添加一个全新类的合理性时,才引入构造函数。

    构造函数中的许多参数也可能表明该类正在处理太多的问题。建设者只有在层叠的情况下才有意义:对于男孩,添加粗鲁的语言部分,对于女孩,添加购物清单

    拆分关注点取决于:继承、泛型参数化类、委托类和逻辑分组对象


    还要考虑是否可以编写测试用例。测试驱动开发在这里很有用。如果您需要模拟一个参数类,“依赖注入”将需要一个更抽象的参数类。

    我想您已经得到了它。。。