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;
}
}
}

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;
}
}
}

参考:Refactoring Day 11 : Switch to Strategy

最新文章

  1. Python基础7:文件操作
  2. Linux虚拟机添加新硬盘的全程图解
  3. Linux踢出其他正在SSH登陆用户
  4. mac下配置openCV
  5. Java/Android引用类型及其使用分析
  6. mysql if exist坑
  7. 开源一个基于nio的java网络程序
  8. android复习第一天-----简单的android常识
  9. C语言中的fread和fwrite
  10. php中带mb的字符串处理函数
  11. poj 3278 Catch That Cow bfs
  12. JS学习之动态加载script和style样式
  13. ORACLE-015:ora-25153 暂时表空间为空,ora01652 无法通过128
  14. 对Java中堆栈的解析
  15. 46. Permutations(medium, backtrack, 重要)
  16. PyQt IDE 环境搭建
  17. ssl握手数据结构
  18. BZOJ4541 HNOI2016矿区(平面图转对偶图)
  19. Django---模版层
  20. 怎么解决深入学习PHP的瓶颈

热门文章

  1. WPF整理-二进制资源和内容
  2. 各种android应用模仿源码
  3. MapleSim助力长臂挖掘机建模问题解决
  4. GitLab版本管理
  5. Mina入门教程(二)----Spring4 集成Mina
  6. python自动化测试(3)- 自动化框架及工具
  7. Hadoop学习笔记—16.Pig框架学习
  8. .NET基础知识点
  9. C# MVC 项目下的路由配置-RouteConfig
  10. JMeter--二、在Windows环境上搭建wordpress