首先,在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分支代碼函數