策略模式
作者:互联网
所谓设计模式,只不过是前人根据经验 总结得来的,归根结底还是基于 面向对象的!
什么是策略模式?
名词分析法:什么是策略?根据形势而确定的原则和方法,这是百度词条收到的,程序设计理念其实也就是这个意思。
比如,商场,网吧等打折,满减 促销,这样同样的商品价格就会根据促销方式 有不同的计算方法!我们直接上个例子
首先定义一个策略接口,因为既然是策略,那么肯定是基于一定的编程基础,进行算法的变化即可。这样的话,算法的名字先用接口规定好
public interface IStrategyModul { /// <summary> /// 根据原价 和策略计算新价格 /// </summary> /// <param name="originPrice">原价</param> /// <returns></returns> double GetPrice(double originPrice); }
具体算法也就是实际算法类,我们先列举2个
//打折类 public class Discount : IStrategyModul { public double DiscountMoney { get; set; } public Discount(double discount) { this.DiscountMoney = discount; } public double GetPrice(double originPrice) { return DiscountMoney * originPrice;//应付多少钱 } } //返现类 public class MoneyBack : IStrategyModul { public double ManE { get; set; }//满额多少开始返钱 public double ReMoney { get; set; }//返多少 public MoneyBack(double mane,double remoney) { this.ManE = mane; this.ReMoney = remoney; } public double GetPrice(double originPrice) { if (originPrice<ManE) { Console.WriteLine("未能达到返现资格,不然再挑选几件称心的商品吧"); return 0; } var result = originPrice - (int)(originPrice / ManE) * ReMoney; return result; //应付多少钱 } }
那么,我们客户端怎么去调用这些算法呐?如何根据实际情况进行算法的切换呐?
我们这时候需要一个上下文类,即承上启下 的类,去进行沟通交流
public class PromotionContext { private IPromotion _p = null; public PromotionContext(IPromotion p) { this._p = p; } public double GetPrice(double originPrice) { if (this._p==null) { Console.WriteLine("最近暂时无促销活动哦!!!"); return originPrice; } return _p.GetPrice(originPrice);//否则返回 活动 后应该付的钱 } }
这样在客户端只需要对上下文类做相应的 算法初始化即可!
#region 策略模式 Console.WriteLine("请输入金额"); var money = Console.ReadLine(); //打折促销 打7折 PromotionContext context = new PromotionContext(new Discount(0.7)); var res = context.GetPrice(double.Parse(money)); Console.WriteLine($"打折后,您应付¥{res}");
//满200 减60 PromotionContext context1 = new PromotionContext(new MoneyBack(200, 60)); var res1 = context1.GetPrice(double.Parse(money)); Console.WriteLine($"满减后,您应付¥{res1}"); #endregion
标签:PromotionContext,策略,double,模式,算法,originPrice,GetPrice,public 来源: https://www.cnblogs.com/messi-10/p/16501917.html