我正在使用Builder模式來更容易地創建對象。但是,標準構建器模式示例不包含錯誤檢查,這是我的代碼中需要的。例如,Simulator
對象中的accessibility
和demandMean
陣列應具有相同的長度。代碼的簡要框架如下所示:帶有錯誤檢查的生成器模式:是否有可能/可取?
public class Simulator {
double[] accessibility;
double[] demandMean;
// Constructor obmitted for brevity
public static class Builder {
private double[] _accessibility;
private double[] _demandMean;
public Builder accessibility(double[] accessibility) {
_accessibility = accessiblity.clone();
return this;
}
public Builder demandMean(double[] demandMean) {
_demandMean = demandMean.clone();
return this;
}
// build() method obmitted for brevity
}
}
作爲另一示例,在一個推廣優化問題,有各種促銷車輛(例如傳單,顯示器)和促進模式,它們是一組促銷的車輛(例如沒有,只有傳單,只顯示,傳單和顯示)。當我創建Problem
時,我必須定義可用的車輛集合,並檢查促銷模式是否使用這些車輛的一個子集,而不是其他一些無法使用的車輛,以及促銷模式不相同(例如, t兩個促銷模式都是「傳單專用」)。代碼的簡單框架如下圖所示:
public class Problem {
Set<Vehicle> vehicles;
Set<PromoMode> promoModes;
public static class Builder {
Set<Vehicle> _vehicles;
Set<PromoMode> _promoModes;
}
}
public class PromoMode {
Set<Vehicle> vehiclesUsed;
}
我的問題有以下幾點:
- 是否有解決這種情況的標準方法?
- 在調用
build()
方法時,應該在構造函數還是構建器中進行錯誤檢查? - 爲什麼這是「正確」的方法?
這是有道理的。謝謝! – 2013-03-24 01:24:56