我已经实现了一个新类,Holder。以下是目标:
- 三个领域。字段 1 和 2 是整数,字段 3 是布尔值。
- 一旦构建,它就不会改变(不可变的)。因此,这些字段将只有吸气剂。
- 通过从 5 种可能的类型(字符串格式 1、字符串格式 2、int、类类型 A 和类类型 B)中提取信息来初始化字段 1 和 2。字段 3 设置为真/假。
这给我留下的问题是有 50 个可能的构造函数选项。5 X 5 X 2。这既不明智也不可扩展(添加第 6 种类型,我必须编写一个巨大的更改),所以我使用了构建器模式:
class Builder {
Builder s1SetField1(String Format1),
Builder s2SetField1(String Format2),
...
Builder s1SetField2(String Format1),
...
Builder setField3(boolean b)
Holder build()
}
这真的很好用。我有 5 个用于字段 1 初始化的构建器方法,5 个用于字段 2 初始化的构建器方法和一个用于布尔值的构建器方法。设置字段后,调用 build() 方法,该方法使用正确格式的字段调用私有构造函数并返回一个新对象。
我遇到的问题是单元测试。我想设置一个列表,其中填充了一个具有代表性的对象,这些对象是使用 Builder 方法的每个排列构建的。现在我回到了 50 个新的 Build() 调用。我考虑过创建 3 个列表 - field1List、field2List 和 field3List。然后,分层迭代每一个:
for (Object f1 : field1List) {
for (Object f2 : field2List) {
for (boolean f3 : field3List) {
returnList.add(new Builder().setField1(f1).setField2(f2).setField3(f3).build());
}
}
}
return returnList;
当然,在列表中保存混合对象似乎很笨重。有没有更好的方法来使用每个排列进行初始化?