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

  • 相关阅读:
    小笔记系列——Excel中获取当前日期
    Git 错误:OpenSSL SSL_read: Connection was reset, errno 10054
    cmd_切换文件目录的几种方法
    Jupyter Notebook 常用操作(持续更新中……)
    chrome 浏览器书签保存
    各种开发工具注释的快捷键(持续更新中…)
    Spyder 快捷键(注释、跳转、缩进)
    ISlide插件安装后,PPT无法正常关闭
    [TimLinux] 操作系统实战45讲
    [TimLinux] vnc and go bashrc
  • 原文地址:https://www.cnblogs.com/sirkevin/p/3460983.html
Copyright © 2011-2022 走看看