zoukankan      html  css  js  c++  java
  • Switch to strategy

    Switch To Strategy (before) 

    namespace RefactoringLib.SwitchToStrategy.Before
    {
        public class ClientCode
        {
            public decimal CalculateShipping()
            {
                ShippingInfo shippingInfo = new ShippingInfo();
                return shippingInfo.CalculateShippingAmount(State.Alaska);
            }
        }
    
        public enum State
        {
            Alaska,
            NewYork,
            Florida
        }
    
        public class ShippingInfo
        {
            public decimal CalculateShippingAmount(State shipToState)
            {
                switch (shipToState)
                {
                    case State.Alaska:
                        return GetAlaskaShippingAmount();
    
                    case State.NewYork:
                        return GetNewYorkShippingAmount();
    
                    case State.Florida:
                        return GetFloridaShippingAmount();
    
                    default:
                        return 0m;
                }
            }
    
            private decimal GetAlaskaShippingAmount()
            {
                return 15m;
            }
    
            private decimal GetNewYorkShippingAmount()
            {
                return 10m;
            }
    
            private decimal GetFloridaShippingAmount()
            {
                return 3m;
            }
        }
    }
    View Code

     

    Switch To Strategy (end)

    namespace RefactoringLib.SwitchToStrategy.End
    {
        public class ClientCode
        {
            public decimal CalculateShipping()
            {
                ShippingInfo shippingInfo = new ShippingInfo();
                return shippingInfo.CalculateShippingAmount(State.Alaska);
            }
        }
    
        public enum State
        {
            Alaska,
            NewYork,
            Florida
        }
    
        public class ShippingInfo
        {
            public IDictionary<State, IShippingCalculaton> ShippingCalculatons { get; set; }
    
            public ShippingInfo()
            {
                ShippingCalculatons = new Dictionary<State, IShippingCalculaton> 
                {
                    { State.Alaska, new AlaskaShippingCalculation() },
                    { State.NewYork, new NewYorkShippingCalculation() },
                    { State.Florida, new FloridaShippingCalculation() }
                };
            }
    
            public decimal CalculateShippingAmount(State state)
            {
                return ShippingCalculatons[state].Calculate();
            }
        }
    
        public interface IShippingCalculaton
        {
            decimal Calculate();
        }
    
        public class AlaskaShippingCalculation : IShippingCalculaton
        {
            public decimal Calculate()
            {
                return 15m;
            }
        }
    
        public class NewYorkShippingCalculation : IShippingCalculaton
        {
            public decimal Calculate()
            {
                return 10m;
            }
        }
    
        public class FloridaShippingCalculation : IShippingCalculaton
        {
            public decimal Calculate()
            {
                return 5m;
            }
        }
    }
    View Code

     参考:Refactoring Day 11 : Switch to Strategy

  • 相关阅读:
    ArrayList源码剖析
    Java集合框架
    Java数据结构和算法(十五)——无权无向图
    Java数据结构和算法(十四)——堆
    Java数据结构和算法(十三)——哈希表
    Java数据结构和算法(十二)——2-3-4树
    Java数据结构和算法(十一)——红黑树
    Java数据结构和算法(十)——二叉树
    Java数据结构和算法(九)——高级排序
    [刷题] Leetcode算法 (2020-2-27)
  • 原文地址:https://www.cnblogs.com/sirkevin/p/3460983.html
Copyright © 2011-2022 走看看