私は次のような場合があります。機能インタフェースのインスタンスを返し工場があります:工場でオブジェクトをよりよく初期化する方法は?
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の各特定のインスタンスが正しくを実行するためにいくつかの追加パラメータを受け入れる必要があることですメソッドを適用してください。たとえば、私は、rafTableRowModifierにplanSpecificBenefitsRatingTableRowModifierと引用IDにをアルゴリズムIDパラメータを渡す必要があります。これらの引数をRowBeanオブジェクトに追加することはできません。追加できる唯一の場所はgetRowModifierInstanceメソッドです。それが大丈夫かどうか教えてください。私にとっては、修飾子の数がになると、メソッドのパラメータの数が増えることがありますが、これは私の意見では悪いと思われます...どうすればそれを避けることができますか?事前に
おかげで、
モディファイアに特定のRatingTypeに適用するかどうかを問い合わせることはできますか?次に、ループ内の使用可能な修飾子を使用してイテレータを実行し、修飾子に応じて作成すると、現在のRatingTypeに適用可能です。 – daniu
主な問題は、 'planSpecificBenefitsRatingTableRowModifier'を呼び出す前に、いくつかの引用符を使って' initialization'を作成する必要があり、この初期化をどこに置くのが良いか分かりません。 – asdasdsdf
私が意味することは、 'Function result = new EmptyMod(); (Modifier mod:modifierList){if mod.isApplicableTo(ratingType){result = result.andThen(mod); for(RatingType ratingType:RatingType.values()) }}}; return result; ' –
daniu