淺析.net策略模式
對于策略模式的理解:當一個業(yè)務(wù)有多種需求時候,在某個時候需要使用不同的方式來計算結(jié)果。這時候不同的方式可以理解為不同的策略來解決同樣的問題。 例如:商場收銀系統(tǒng)計算價格,1:正常計算 2:商品打折計算,3:滿300減100等方式。就可以按三種策略來處理需求。
簡單的說:策略模式就是用來封裝算法的,但在實踐中,我們發(fā)現(xiàn)可以用他來封裝幾乎任何類型的規(guī)則,只要在分析過程中聽到需要在不同的時間應用不同的業(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 "正常計算價格";
}
}
public class Discount : TacticsModel
{
public override string GetResult()
{
return "按打折計算價格";
}
}
public class Preferential : TacticsModel
{
public override string GetResult()
{
return "滿300減100活動";
}
}
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();
}
}
}
這種方式和簡單工廠方式差不多,只是有稍微區(qū)別。 簡單工廠模式需要暴漏給客戶端兩個類,策略模式和工廠模式的簡單結(jié)合只暴漏了一個CashContext類
客戶端調(diào)用代碼:
Console.WriteLine("請計算類型1正常,2打折,3優(yōu)惠:");
string type = Console.ReadLine();
CashContext cc = new CashContext(type);
Console.WriteLine(cc.GetResult());
結(jié)果:


其中還是使用了swich ,也就是就是說增加一種需求就有更改swith語句,很是不爽,不過任何需求的變更都是需要成本的。
只是成本的高低是有區(qū)別的。這個地方用反射技術(shù)會有更好的效果。后續(xù)會補充。
相關(guān)文章
ASP.NET Core 6.0 中使用Autofac的項目實踐
本文主要介紹了ASP.NET Core 6.0 中使用Autofac的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-01-01
詳解開源免費且穩(wěn)定實用的.NET PDF打印組件itextSharp(.NET組件介紹之八)
本篇文章主要介紹了.NET PDF打印組件itextSharp。.NET中實現(xiàn)PDF打印的組件比較多,例如PDFsharp、Report.NET、sharpPDF、itextSharp等等,今天主要簡單的介紹itextSharp組件。有興趣的可以了解一下。2016-12-12
asp.net+ajax+sqlserver自動補全功能實現(xiàn)解析
這篇文章主要介紹了asp.net + ajax + sqlserver 自動補全功能,需要的朋友可以參考下2014-03-03

