源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

浅析.net策略模式

  • 时间:2021-02-04 05:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:浅析.net策略模式
对于策略模式的理解:当一个业务有多种需求时候,在某个时候需要使用不同的方式来计算结果。这时候不同的方式可以理解为不同的策略来解决同样的问题。 例如:商场收银系统计算价格,1:正常计算 2:商品打折计算,3:满300减100等方式。就可以按三种策略来处理需求。 简单的说:策略模式就是用来封装算法的,但在实践中,我们发现可以用他来封装几乎任何类型的规则,只要在分析过程中听到需要在不同的时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
[u]复制代码[/u] 代码如下:
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类 客户端调用代码:
[u]复制代码[/u] 代码如下:
   Console.WriteLine("请计算类型1正常,2打折,3优惠:");    string type = Console.ReadLine();    CashContext cc = new CashContext(type);    Console.WriteLine(cc.GetResult());
结果: [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100119_0_46433.jpg[/img] [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100119_1_94961.jpg[/img] 其中还是使用了swich ,也就是就是说增加一种需求就有更改swith语句,很是不爽,不过任何需求的变更都是需要成本的。 只是成本的高低是有区别的。这个地方用反射技术会有更好的效果。后续会补充。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部