摆脱switch语句

时间:2018-06-16 15:26:12

标签: oop switch-statement refactoring

最近正在处理一项任务,我遇到了一个问题,我遇到了问题,问题在于switch语句如下:

private static final Double FIRST_HOUR_COST = 1.0;
private static final Double SECOND_HOUR_COST = 2.0;
private static final Double CONVERSION_RATE = 1.5

@Override
public double calculateReservationCost(Reservation reservation)
{
    int hours = DateUtils.hoursDifference(reservation.getStartTime(), reservation.getStopTime()) + 1;

    switch(hours)
    {
        case 1:
            return FIRST_HOUR_COST;
        case 2:
            return FIRST_HOUR_COST + SECOND_HOUR_COST;
        default:
            return FIRST_HOUR_COST +
                   SECOND_HOUR_COST +
                   countEachNextHour(SECOND_HOUR_COST, 2, hours);
    }
}

我尝试了可以​​在堆栈上找到的所有解决方案,但无法根据我的需要进行调整(将函数映射为值,单个等式等)。希望有任何其他方法可以在不违反任何OOP规则的情况下以有效的方式替换它。

1 个答案:

答案 0 :(得分:0)

我将Switch语句替换为Strategy模式。这样一来,您以后就可以添加新的策略,而无需花费很长的切换时间。