オブジェクトの作成を簡単にするためにBuilderパターンを使用しています。ただし、標準のビルダーパターンの例には、私のコードで必要なエラーチェックは含まれていません。たとえば、オブジェクトの配列accessibility
とdemandMean
配列Simulator
は同じ長さである必要があります。コードの簡単なフレームワークを以下に示します。
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
、使用可能な車両のセットを定義し、プロモーションモードがこれらの車両のサブセットを使用し、他の使用できない車両を使用していないこと、およびプロモーションモードが同一でないことを確認する必要があります(たとえば、どちらも「フライヤーのみ」の2つのプロモーションモード)。コードの簡単なフレームワークを以下に示します。
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()
メソッドが呼び出されたときに、コンストラクターまたはビルダーでエラーチェックを実行する必要がありますか?- なぜこれが「正しい」アプローチなのですか?