我有以下情况:有一个工厂返回Function接口的实例:
public class RatingTableRowModifierFactory
{
@Autowired
private PlanSpecificBenefitsRatingTableRowModifier planSpecificBenefitsRatingTableRowModifier;
@Autowired
private CompositeBenefitsRatingTableRowModifier compositeBenefitsRatingTableRowModifier;
@Autowired
private RafRatingTableRowModifier rafTableRowModifier;
public Function<RowBean, RowBean> getRowModifierInstance(.... input)
{
switch (ratingType)
{
case AGE:
return planSpecificBenefitsRatingTableRowModifier;
case COMPOSITE_AGE:
return planSpecificBenefitsRatingTableRowModifier
.andThen(compositeBenefitsRatingTableRowModifier)
.andThen(rafTableRowModifier);
default:
return new EmptyRatingTableRowModifier();
}
}
}
我的方法中的主要问题是RowModifier的每个特定实例都必须接受一些其他参数才能正确执行 apply 方法。例如,我需要将 algorithmSpecicRowModifier 和引用ID 中的算法ID 参数传递到 rafTableRowModifier 。我无法在 RowBean 对象中添加这些参数,我唯一可以添加它们的地方是 getRowModifierInstance 方法。如果可以,请告诉我?至于我,它看起来很糟糕,因为如果修饰符的数量增加,那么方法参数的数量也可能增长,这对我来说是不好的...请帮助我理解如何避免这种情况?
提前致谢,
答案 0 :(得分:0)
我不知道你的具体情况,但我想在上层你知道你想要为评级类型传递的参数和参数。如果你想保持这种方法,为了避免传递空值,你可以添加第二个参数Map<enum, Object>
:
enum ModifiersEnum {
COMPOSITE_BENEFITS_TABLE_ROW,
TABLE_ROW;
}
public Function<RowBean, RowBean> getRowModifierInstance(ModifiersEnum ratingType, Map<ModifiersEnum, Object> parameters) {
switch (ratingType)
{
case AGE:
return planSpecificBenefitsRatingTableRowModifier;
case COMPOSITE_AGE:
return planSpecificBenefitsRatingTableRowModifier
.andThen(parameters.get(ModifiersEnum.COMPOSITE_BENEFITS_TABLE_ROW))
.andThen(parameters.get(ModifiersEnum.TABLE_ROW));
default:
return new EmptyRatingTableRowModifier();
}
}
正如我所说,我不知道如何调用此工厂模式,但在这种情况下,您可以传递通用参数。