首先,在C#中,多态的体现是什么?虚函数、抽象方法、接口。废话很少说,直接上代码:html
#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}"); }
就这么简单,细心的咱们能够发现,这种多态的写法好像策略模式,没错!设计模式中绝大数的模式都是多态的应用罢了。ide
参考连接
31天重构学习笔记31. 使用多态代替条件判断
31天重构学习笔记11. 使用策略类
策略模式重构switch/case分支代码函数