Oop 摆脱switch语句
最近在执行一项任务时,我遇到了一个问题,我一直无法解决,问题在于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
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语句中不会出现新的情况,只有不同比率的新实现。