如何更好地初始化工厂中的对象?

时间:2017-08-14 13:43:41

标签: java oop design-patterns

我有以下情况:有一个工厂返回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 方法。如果可以,请告诉我?至于我,它看起来很糟糕,因为如果修饰符的数量增加,那么方法参数的数量也可能增长,这对我来说是不好的...请帮助我理解如何避免这种情况?

提前致谢,

1 个答案:

答案 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();
    }
}

正如我所说,我不知道如何调用此工厂模式,但在这种情况下,您可以传递通用参数。