Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 摆脱switch语句_Oop_Switch Statement_Refactoring - Fatal编程技术网

Oop 摆脱switch语句

Oop 摆脱switch语句,oop,switch-statement,refactoring,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(Res

最近在执行一项任务时,我遇到了一个问题,我一直无法解决,问题在于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规则的情况下高效地替换它。

我会用策略模式替换Switch语句。这将允许您在未来添加新策略,而无需长时间的切换语句。

问题到底出在哪里?你认为切换是一个糟糕的解决方案,还是不起作用?这个问题可能更适合该网站,但既然你已经在这里发布了,我会说你的
切换声明没有任何问题。它容易阅读,干净,而且可能是最好的方法。你可以使用一系列if-else语句,甚至是一个三元表达式,但两者都更难看。它可读性强,很容易理解它的功能。我不会碰它。我的意思是,当我看它的时候,它对我来说似乎有点太表达了,但可能只是我自己。switch语句中不会出现新的情况,只有不同比率的新实现。