如何在返回类型未知时避免过多if条件?

时间:2012-08-12 16:43:45

标签: java design-patterns

当返回类型是动态的时,如何避免过多的if条件?

据我所知,如果条件和值是静态的,我们可以使用键和值创建一个hashmap,如果条件也要避免太多。

在下面的示例中,每个月的价格与客户的价格不同 客户...我需要添加12个相同的if语句...假设该字段是除了月份之外的东西......他们可能最终会超过100或200,如果是... ex:年... 1900年至2000年

Example,

public String getPrice(int Month) {
   String price = "";
   switch (month) {
        case 1:
          price = customerTable.getJanPrice();
          break;
        case 2:
          price = customerTable.getFebPrice();
          break;
         ...........
    }
    return price;
}

你能否帮我解答一下你的建议/意见?

谢谢, 卡锡尔

2 个答案:

答案 0 :(得分:2)

使用您想要的价格创建一个枚举。

public enum Month 
{
    SEPTEMBER (3.33),
    OCTOBER (4.85),
    NOVEMBER (5.98),
    etc ;

    public final double Price;

    Month(double monthPrice)
    {
        this.Price = monthPrice;
    }        
}

然后访问该价格:

Month.SEPTEMBER.Price

修改 因为数据在运行时被更改,并且使用类是“无限”的可能性,这将是一个更易于管理的选项。

public class Year
{   
    public final List<Month> Months;

    public Year(List<Month> months)
    {
        Months = months;
    }
}

public class Month
{
    public final double Price;

    public Month(double price)
    {
        Price = price;
    }
}

答案 1 :(得分:0)

如果(假设在这里)每个客户返回的'dataobject'是某种hashmap(kv-store),该怎么办?

然后使用一些约定,您可以使用<day,month,year> - combi来构建一个密钥,用于在返回的数据对象中查找该特定组合的价格。