Java 对具有多个参数的方法使用生成器模式?

Java 对具有多个参数的方法使用生成器模式?,java,builder,effective-java,Java,Builder,Effective Java,我已经阅读了“有效Java”中的一条建议,当遇到使用大量参数的构造函数时,使用构建器模式 相同的模式是否适用于具有大量参数的方法?不完全适用,因为Builder所做的是构建一个对象 那么,将某些方法(谁知道是什么)更改为生成器,有什么意义呢 对于包含太多参数的方法,您应该执行以下操作: 把它分解成更小的方法 使用varargs 使用一些集合放入相同类型的参数中 是的,有点像。您基本上创建了一个新类型来封装所有参数——或者可能只是其中的一部分 现在,您可以创建一个构建器,然后创建该类型的一个不可

我已经阅读了“有效Java”中的一条建议,当遇到使用大量参数的构造函数时,使用构建器模式


相同的模式是否适用于具有大量参数的方法?

不完全适用,因为
Builder
所做的是构建一个对象

那么,将某些方法(谁知道是什么)更改为
生成器
,有什么意义呢

对于包含太多参数的方法,您应该执行以下操作:

  • 把它分解成更小的方法
  • 使用
    varargs
  • 使用一些
    集合
    放入相同类型的参数中

  • 是的,有点像。您基本上创建了一个新类型来封装所有参数——或者可能只是其中的一部分

    现在,您可以创建一个构建器,然后创建该类型的一个不可变版本——或者您可以只允许“uber参数”类型是可变的,并直接将其传入。在后一种情况下,您没有构建器模式,但是您可以将其视为构建方法调用本身,因为您可以分别指定方法调用的各个方面。 您可能会争辩说构建器模式实际上只是这种模式的一个特例,在某些方面-碰巧
    build()
    方法通常在构建器上,而不是在其他地方将构建器作为方法参数,但是这两种工作方式之间存在明确的相关性

    NET框架中的一个例子是,它被传递到一组方法或构造函数中。(它有点像一个构建器,通常在构建
    XmlWriter
    时使用)我现在想不出标准Java库中的任何示例,但它们可能存在于某个地方


    但是,如果您发现自己有很多参数,那么值得再看一次设计,以检查是否不应该将其中一些参数分组在一起,就像普通设计的一部分一样。

    将方法转换为生成器是可能的,但不典型。是一个示例,类似于
    inthash=newhashcodebuilder().append(a).append(b).build()
    ,尽管在这种特定情况下,您可能更喜欢只使用varargs的方法,如Guava的方法,如
    int hash=Objects.hashCode(a,b)


    一个使用大量不同类型的参数的方法不适合于VARARGS,因此您可能会发现适当的生成器,或者您可能想考虑减少在该方法中所做的工作量。或者在其他复合类型中封装参数。

    我不知道如何以构建器的方式实现一个方法的构造器模式,我将考虑使用复合和传递空参数到您考虑使用的可选的单元格上。我认为这个问题是无关的。Builder模式是一种创造性的设计模式,您正在谈论的方法主要涉及行为设计模式。您应该提供一个具体的示例/用例场景。当您创建一个包含参数值的对象以缩短参数列表时,生成器模式对该参数对象的适用性是一个自然的结果。此外,请查看是否可以使用接口来提供方法参数,而不是具体的类型-这将有助于将方法中实际需要的内容放在首位(包含该信息的对象通常会具有您不需要的其他属性和方法,例如仅需要getter时的setter等)@MetroidFan2002:Hmm…如果我专门为方法调用设计一个类型,我想无论如何我都不想重用现有的类。在某些情况下,这可能是合适的,但我认为我自己没有使用过这种模式。@Jon_Skeet有时在实现中,用appr一旦你充实了你的界面,就要使用适当的信息——当然,这完全取决于你的模型。