class ProductWeightFunction implements ViolationWeightFunction {

    @Override
    public double getWeight(Overlap violation, Overlaps overlaps, Model model) {
        return Arrays.stream(factors)
                .mapToDouble(factor -> factor.getWeight(violation, overlaps, model))
                .reduce(1, (a, b) -> a * b);
    }

    public  ProductWeightFunction(ViolationWeightFunction... factors);

}