重疊構(gòu)造器模式
- 重疊構(gòu)造器模式(telescoping constructor pattern)采用前面是必選參數(shù)班利,后面是可選參數(shù)的模式
- 由于 Java 不支持缺省參數(shù)洞豁,所以會采用多個構(gòu)造函數(shù)窗看,每個構(gòu)造函數(shù)增加一個可選參數(shù)的聲明方式
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);
重疊構(gòu)造器模式的缺點
- 構(gòu)造函數(shù)聲明冗長
- 使用時,代碼不直觀显沈,不容易理解
JavaBean 模式
- 空構(gòu)造函數(shù)
- 使用 set 系列方法來設(shè)置
JavaBean 模式的缺點
- 字段的設(shè)置是隨機順序的软瞎,無法保持一個統(tǒng)一的內(nèi)部狀態(tài)
- 無法事先不可變性質(zhì)的類,需要額外的努力來實現(xiàn)線程安全
Builder 模式 (推薦)
- 源自設(shè)計模式的 Builder pattern拉讯,但不盡相同
- 使用代碼
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
.calories(100)
.sodium(35)
.carbohydrate(27)
.build();
- 在生成對象時涤浇,可統(tǒng)一檢查參數(shù)的有效性(build 方法中)
- 支持類繼承關(guān)系和層次結(jié)構(gòu)(見原書的例子,有更詳盡的說明魔慷,如遞歸類型參數(shù))
- 比之 JavaBean 模式只锭,更加安全
- 但是,也更加重一些院尔,如果注重極端性能纹烹,可考慮優(yōu)化