1: using System.Collections.Generic;
2:
3: namespace LosTechies.DaysOfRefactoring.SwitchToStrategy.After
4: {
5: public class ClientCode
6: {
7: public decimal CalculateShipping()
8: {
9: ShippingInfo shippingInfo = new ShippingInfo();
10: return shippingInfo.CalculateShippingAmount(State.Alaska);
11: }
12: }
13:
14: public enum State
15: {
16: Alaska,
17: NewYork,
18: Florida
19: }
20:
21: public class ShippingInfo
22: {
23: private IDictionary<State, IShippingCalculation> ShippingCalculations { get; set; }
24:
25: public ShippingInfo()
26: {
27: ShippingCalculations = new Dictionary<State, IShippingCalculation>
28: {
29: { State.Alaska, new AlaskShippingCalculation() },
30: { State.NewYork, new NewYorkShippingCalculation() },
31: { State.Florida, new FloridaShippingCalculation() }
32: };
33: }
34:
35: public decimal CalculateShippingAmount(State shipToState)
36: {
37: return ShippingCalculations[shipToState].Calculate();
38: }
39: }
40:
41: public interface IShippingCalculation
42: {
43: decimal Calculate();
44: }
45:
46: public class AlaskShippingCalculation : IShippingCalculation
47: {
48: public decimal Calculate()
49: {
50: return 15m;
51: }
52: }
53:
54: public class NewYorkShippingCalculation : IShippingCalculation
55: {
56: public decimal Calculate()
57: {
58: return 10m;
59: }
60: }
61:
62: public class FloridaShippingCalculation : IShippingCalculation
63: {
64: public decimal Calculate()
65: {
66: return 3m;
67: }
68: }
69: }