gpt4 book ai didi

Java减少构造函数的数量

转载 作者:行者123 更新时间:2023-11-30 03:02:36 25 4
gpt4 key购买 nike

假设我有一些具有构造函数的类,每个构造函数都有 2 个参数例如我有 5 种类型,其中两种可以作为第一个参数传递,三种作为第二个参数传递

假设类型为 A、B、C、D、E。基本上我有这样的东西:

public SomeClass(A,C) {}
public SomeClass(A,D) {}
public SomeClass(A,E) {}

public SomeClass(B,C) {}
public SomeClass(B,D) {}
public SomeClass(B,E) {}

正如您所看到的,这些类型有所有可能的组合并且没有可选参数,就像标准构建器模式一样。

如何减少构造函数的数量?有什么模式可以帮助我吗?

编辑

我不能使用标准构建器,因为如果我提供 A 那么我就不能提供 B如果我提供了 C,那么我就无法提供 D 或 E

最佳答案

您可以创建受限构建器模式:

class MyBuilder {

public MyBuilder(A) { ... }
public MyBuilder(B) { ... }

public SomeClass build(C) { ... }
public SomeClass build(D) { ... }
public SomeClass build(E) { ... }

}

使用示例:

new MyBuilder(A).build(C)

如果只有 6 种可能的组合,我可能会容忍现有代码的复杂性和重复性。但如果将来有更多的可能性和/或代码将被扩展,那么我会在这里推荐这种模式。

<小时/>

您可以将此模式扩展到更多参数,但它会变得更难看,因为您需要更多中间类。对于 3 个参数,您可以实现如下所示的内容:

class MyBuilder1 {
public MyBuilder1(A) { ... }
public MyBuilder1(B) { ... }

public MyBuilder2 build(C) { ... }
public MyBuilder2 build(D) { ... }
public MyBuilder2 build(E) { ... }

class MyBuilder2 {
public MyBuilder2(C) { ... }
public MyBuilder2(D) { ... }
public MyBuilder2(E) { ... }

public SomeClass build(F) { ... }
public SomeClass build(G) { ... }
}
}

SomeClass x = new MyBuilder1(B).build(D).build(F);

不幸的是,中间阶段需要重复 C、D、E 类型的方法和构造函数。

关于Java减少构造函数的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35583372/

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