zoukankan      html  css  js  c++  java
  • 策略模式重构条件语句

    通过策略模式来重构优化代码里面的switch/case分支代码。极大程度上提高了程序的扩展性。当然,如果分支比较多,每次都需要新增加一个类,这的确是有点麻烦,可以考虑使用反射来实现。
    代码:

    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 代码

  • 相关阅读:
    爬虫实践-微博关键词搜索抓取
    爬虫实践-拉勾网测试经理JD抓取【2018.05.15】
    爬虫实践--租房信息查找
    服务器python发送mail无法发出问题
    我的面试流程梳理
    字典树模板(前缀查找、整串查找)
    搬运工程 启动!
    开始收集模板啦!
    WPS表格中不能输入中文 or其他
    ubunt命令
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/10981236.html
Copyright © 2011-2022 走看看