迄今为止我使用的是下列的 http://rwhansen.blogspot.com/2007/07/theres-builder-pattern-that-joshua.html构建器模式的实现(与描述的实现相反)here http://en.wikipedia.org/wiki/Builder_pattern#Java):
public class Widget {
public static class Builder {
public Builder(String name, double price) { ... }
public Widget build() { ... }
public Builder manufacturer(String value) { ... }
public Builder serialNumber(String value) { ... }
public Builder model(String value) { ... }
}
private Widget(Builder builder) { ... }
}
这对于我遇到的大多数情况都很有效,在这些情况下,我需要构建具有各种必需/强制和可选参数的复杂对象。然而,我最近一直在努力理解当所有参数都是强制性的(或者至少绝大多数参数都是强制性的)时,该模式有何好处。
解决这个问题的一种方法是对传递给它们自己的类的参数进行逻辑分组,以减少传递给构建器构造函数的参数数量。
例如,代替:
Widget example = new Widget.Builder(req1, req2, req3,req4,req5,req6,req7,req8)
.addOptional(opt9)
.build();
分组如下:
Object1 group1 = new Object1(req1, req2, req3, req4);
Object2 group2 = new Object2(req5, req6);
Widget example2 = new Widget.Builder(group1, group2, req7, req8)
.addOptional(opt9)
.build();
虽然使用单独的对象可以大大简化事情,但如果不熟悉代码,也会使事情变得有点难以理解。我考虑的一件事是将所有参数移动到自己的参数中addParam(param)
方法,然后对所需参数进行验证build()
method.
什么是最佳实践?是否有我没有考虑过的更好方法?