浅析.net策略模式
程序员文章站
2024-02-22 15:55:46
对于策略模式的理解:当一个业务有多种需求时候,在某个时候需要使用不同的方式来计算结果。这时候不同的方式可以理解为不同的策略来解决同样的问题。 例如:商场收银系统计算价格,1...
对于策略模式的理解:当一个业务有多种需求时候,在某个时候需要使用不同的方式来计算结果。这时候不同的方式可以理解为不同的策略来解决同样的问题。 例如:商场收银系统计算价格,1:正常计算 2:商品打折计算,3:满300减100等方式。就可以按三种策略来处理需求。
简单的说:策略模式就是用来封装算法的,但在实践中,我们发现可以用他来封装几乎任何类型的规则,只要在分析过程中听到需要在不同的时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
复制代码 代码如下:
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();
}
}
}
这种方式和简单工厂方式差不多,只是有稍微区别。 简单工厂模式需要暴漏给客户端两个类,策略模式和工厂模式的简单结合只暴漏了一个cashcontext类
客户端调用代码:
复制代码 代码如下:
console.writeline("请计算类型1正常,2打折,3优惠:");
string type = console.readline();
cashcontext cc = new cashcontext(type);
console.writeline(cc.getresult());
结果:
其中还是使用了swich ,也就是就是说增加一种需求就有更改swith语句,很是不爽,不过任何需求的变更都是需要成本的。
只是成本的高低是有区别的。这个地方用反射技术会有更好的效果。后续会补充。