淺析.net策略模式

字號(hào):


    對(duì)于策略模式的理解:當(dāng)一個(gè)業(yè)務(wù)有多種需求時(shí)候,在某個(gè)時(shí)候需要使用不同的方式來(lái)計(jì)算結(jié)果。這時(shí)候不同的方式可以理解為不同的策略來(lái)解決同樣的問(wèn)題。 例如:商場(chǎng)收銀系統(tǒng)計(jì)算價(jià)格,1:正常計(jì)算 2:商品打折計(jì)算,3:滿300減100等方式。就可以按三種策略來(lái)處理需求。
    簡(jiǎn)單的說(shuō):策略模式就是用來(lái)封裝算法的,但在實(shí)踐中,我們發(fā)現(xiàn)可以用他來(lái)封裝幾乎任何類(lèi)型的規(guī)則,只要在分析過(guò)程中聽(tīng)到需要在不同的時(shí)間應(yīng)用不同的業(yè)務(wù)規(guī)則,就可以考慮使用策略模式處理這種變化的可能性。
    代碼如下:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace DesignModel
    {
    /// <summary>
    /// 策略模式
    /// </summary>
    public class TacticsModel
    {
    public string type { get; set; }
    public virtual string GetResult()
    {
    return "";
    }
    }
    public class Normal:TacticsModel
    {
    public override string GetResult()
    {
    return "正常計(jì)算價(jià)格";
    }
    }
    public class Discount : TacticsModel
    {
    public override string GetResult()
    {
    return "按打折計(jì)算價(jià)格";
    }
    }
    public class Preferential : TacticsModel
    {
    public override string GetResult()
    {
    return "滿300減100活動(dòng)";
    }
    }
    public class CashContext
    {
    TacticsModel tm = null;
    public CashContext(string type)
    {
    switch (type)
    {
    case "1":
    tm = new Normal();
    break;
    case "2":
    tm = new Discount();
    break;
    case "3":
    tm = new Preferential();
    break;
    default:
    break;
    }
    }
    public string GetResult()
    {
    return tm.GetResult();
    }
    }
    }
    這種方式和簡(jiǎn)單工廠方式差不多,只是有稍微區(qū)別。 簡(jiǎn)單工廠模式需要暴漏給客戶(hù)端兩個(gè)類(lèi),策略模式和工廠模式的簡(jiǎn)單結(jié)合只暴漏了一個(gè)CashContext類(lèi)
    客戶(hù)端調(diào)用代碼:
    代碼如下:
    Console.WriteLine("請(qǐng)計(jì)算類(lèi)型1正常,2打折,3優(yōu)惠:");
    string type = Console.ReadLine();
    CashContext cc = new CashContext(type);
    Console.WriteLine(cc.GetResult());
    名單