经过策略模式来重构优化代码里面的switch/case分支代码。极大程度上提升了程序的扩展性。固然,若是分支比较多,每次都须要新增长一个类,这的确是有点麻烦,能够考虑使用反射来实现。
代码:html
namespace DP { public enum State { Alaska, NewYork, Florida } public class CalculateShippingAmount { public CalculateShippingAmount(IDictionary<State, IGetShippingAmount> dic) => _dic = dic; private IDictionary<State, IGetShippingAmount> _dic { get; set; } public decimal Calculate(State state) => _dic[state].GetAmount(); } public interface IGetShippingAmount { decimal GetAmount(); } #region 具体地址的实现 // 具体 public class GetAlaskaShippingAmount : IGetShippingAmount { public decimal GetAmount() => 15; } public class GetNewYorkShippingAmount : IGetShippingAmount { public decimal GetAmount() => 10; } public class GetFloridaShippingAmount : IGetShippingAmount { public decimal GetAmount() => 3; } #endregion }
调用:优化
#region 策略模式重构 switch...case... static void SwitchToStrategy() { var dic = new Dictionary<State, IGetShippingAmount> { {State.Alaska, new GetAlaskaShippingAmount() }, {State.Florida, new GetFloridaShippingAmount() }, {State.NewYork, new GetNewYorkShippingAmount() } }; var calculate = new CalculateShippingAmount(dic); var result = calculate.Calculate(State.Florida); Console.WriteLine($"{State.Florida.ToString()}返回{result}"); } #endregion
参考:使用策略模式重构switch case 代码spa