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