多態重構條件語句

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

相關文章
相關標籤/搜索