重叠构造器模式
- 重叠构造器模式(telescoping constructor pattern)采用前面是必选参数,后面是可选参数的模式
- 由于 Java 不支持缺省参数,所以会采用多个构造函数,每个构造函数增加一个可选参数的声明方式
public class NutritionFacts {
...
public NutritionFacts(int servingSize, int servings) {
...
}
public NutritionFacts(int servingSize, int servings, int calories) {
...
}
public NutritionFacts(int servingSize, int servings, int calories, int fat) {
...
}
public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
...
}
public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) {
...
}
}
NutritionFacts cocaCola = new NutritionFacts(240, 8, 100, 0, 35, 27);
重叠构造器模式的缺点
JavaBean 模式
JavaBean 模式的缺点
- 字段的设置是随机顺序的,无法保持一个统一的内部状态
- 无法事先不可变性质的类,需要额外的努力来实现线程安全
Builder 模式 (推荐)
- 源自设计模式的 Builder pattern,但不尽相同
- 使用代码
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
.calories(100)
.sodium(35)
.carbohydrate(27)
.build();
- 在生成对象时,可统一检查参数的有效性(build 方法中)
- 支持类继承关系和层次结构(见原书的例子,有更详尽的说明,如递归类型参数)
- 比之 JavaBean 模式,更加安全
- 但是,也更加重一些,如果注重极端性能,可考虑优化