• 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

  • 相关阅读:
    nginx Server names
    ES6--变量的声明及解构赋值
    Android ListView and Tips.
    Eclipse自己定义keystore
    POJ 1129 Channel Allocation(DFS)
    机器学习笔记十三:Ensemble思想(上)
    设计模式——享元模式具体解释
    老猪带你玩转自定义控件三——sai大神带我实现ios 8 时间滚轮控件
    老猪带你玩转android自定义控件二——自定义索引栏listview
    android动手写控件系列——老猪叫你写相机
  • 原文地址:https://www.cnblogs.com/sirkevin/p/3460983.html
Copyright © 2020-2023  润新知