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

  • 相关阅读:
    【原创】Zend Framework 2框架之MVC
    poj3101--Astronomy(分数的最小公倍数)
    【c语言】输入一个递增排序的数组的一个旋转,输出旋转数组中的最小元素
    Java中&、|、&&、||详解
    编写webpack 插件
    Babel 入门教程
    Eslint 规则说明
    npm模块之http-proxy-middleware使用教程(译)
    sass和less的几点不同
    babel的使用(关于使用async报错的问题)
  • 原文地址:https://www.cnblogs.com/sirkevin/p/3460983.html
Copyright © 2011-2022 走看看