1

オブジェクトの作成を簡単にするためにBuilderパターンを使用しています。ただし、標準のビルダーパターンの例には、私のコードで必要なエラーチェックは含まれていません。たとえば、オブジェクトの配列accessibilitydemandMean配列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;
}

私の質問は次のとおりです。

  1. そのような状況に対処するための標準的なアプローチはありますか?
  2. build()メソッドが呼び出されたときに、コンストラクターまたはビルダーでエラーチェックを実行する必要がありますか?
  3. なぜこれが「正しい」アプローチなのですか?
4

3 に答える 3

2

オブジェクトの作成中に不変条件を保持する必要がある場合、パラメータが不変条件に違反している場合は構築を停止します。これもフェイルファーストのアプローチです。
ビルダー パターンは、多数のパラメーターがある場合にオブジェクトを作成するのに役立ちます。
これは、エラー チェックを行わないという意味ではありません。パラメータがオブジェクトの不変条件に違反するとすぐに
、適切なものをスローするだけですRuntimeException

于 2013-03-23T18:14:41.117 に答える
0

「正しい」アプローチは実際には状況によって異なります。異なるサイズの配列を構築することが無効な場合は、構築で処理を行う方が良いと思います。無効な状態がキャッチされるのが早ければ早いほど良いでしょう。

たとえば、配列を変更して別の配列を入れることができる場合は、それらを呼び出すときにそれを行う方がよいかもしれません。

于 2013-03-23T18:16:00.453 に答える