首先,在C#中,多态的体现是什么?虚函数、抽象方法、接口。废话不多说,直接上代码:
- #region 多态重构switch...case....
-     public abstract class ShippingCalculation
-     {
-         public abstract decimal Calculate();
-     }
-     public class AlaskShippingCalculation : ShippingCalculation
-     {
-         public override decimal Calculate()
-         {
-             return 15m;
-         }
-     }
-     public class NewYorkShippingCalculation : ShippingCalculation
-     {
-         public override decimal Calculate()
-         {
-             return 10m;
-         }
-     }
-     public class FloridaShippingCalculation : ShippingCalculation
-     {
-         public override decimal Calculate()
-         {
-             return 3m;
-         }
-     }
-     public class Context
-     {
-         public decimal ProcessCalculate(ShippingCalculation shippingCalculation)
-         {
-             return shippingCalculation.Calculate();
-         }
-     }
-     #endregion
我们抽象出来基类,将其改造为抽象类和抽象方法,使其在子类中重写各自的逻辑,而后具体的选择(也就是条件语句)交给客户端来处理。
- static void SwitchToPolym()
- {
-     var ctx = new Context();
-     var price = ctx.ProcessCalculate(new FloridaShippingCalculation());
-     Console.WriteLine($"{price}");
- }
就这么简单,细心的我们可以发现,这种多态的写法好像策略模式,没错!设计模式中绝大数的模式都是多态的应用罢了。
参考链接
31天重构学习笔记31. 使用多态代替条件判断
31天重构学习笔记11. 使用策略类
策略模式重构switch/case分支代码