首先,在C 中,多態的體現是什麼?虛函數、抽象方法、介面。廢話不多說,直接上代碼: 我們抽象出來基類,將其改造為抽象類和抽象方法,使其在子類中重寫各自的邏輯,而後具體的選擇(也就是條件語句)交給客戶端來處理。 就這麼簡單,細心的我們可以發現,這種多態的寫法好像策略模式,沒錯!設計模式中絕大數的模式都 ...
首先,在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分支代碼