策略模式不是 Map 替代 if-else 就完事了——Spring 怎么用它做路由分发的
有个面试很经典的场景题:“怎么优化这段 if-else?”
publicBigDecimalcalculatePrice(Orderorder){if(order.getType()==OrderType.NORMAL){returnorder.getAmount().multiply(newBigDecimal("1.0"));}elseif(order.getType()==OrderType.VIP){returnorder.getAmount().multiply(newBigDecimal("0.9"));}elseif(order.getType()==OrderType.SVIP){returnorder.getAmount().multiply(newBigDecimal("0.8"));}elseif(order.getType()==OrderType.WHOLESALE){returnorder.getAmount().multiply(newBigDecimal("0.7")).subtract(newBigDecimal("50"));}thrownewIllegalArgumentException("unknown type");}标准答案是策略模式 + Map:
@ComponentpublicclassPriceCalculator{privateMap<OrderType