我正在使用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