策略模式
策略模式适用于 需要经常改变算法实现的场景 比如商场的销售场景中(正常销售、返利销售、折扣),使得算法的改动不影响客户端的调用
using System; using System.Collections.Generic; using System.Text; namespace 策略模式 { public class CashContext { private CashSuper super=null; public CashContext(CashInfo info) { switch (info.SaleType) { case "正常销售": super = new CashC(info.Money); break; case "返利": super = new CashA(info.Money, info.MoneyCondition,info.MoneyReturn); break; case "折扣": super = new CashB(info.Money, info.MoneyCondition); break; default: throw new NullReferenceException("找不到对应的类型"); break; } } public double GetResult() { return super.AcceptCash(); } } public struct CashInfo { public double Money { get; set; } public double MoneyCondition { get; set; } public double MoneyReturn { get; set; } public string SaleType { get; set; } } }
using System; using System.Collections.Generic; using System.Text; namespace 策略模式 { /// <summary> /// 返利 /// </summary> public class CashA:CashSuper { private double _money; private double _moneyCondition; private double _returnMoney; public CashA(double money,double moneyCondition,double returnMoney) { this._money = money; this._moneyCondition = moneyCondition; this._returnMoney = returnMoney; } private double GetMoney() { return (_money-(Math.Floor(_money/_moneyCondition)*_returnMoney)); } public override double AcceptCash() { Console.WriteLine("I'm A"); return GetMoney(); } } /// <summary> /// 打折 /// </summary> public class CashB : CashSuper { private double _money; private double _moneyCondition; public CashB(double money, double moneyCondition) { this._money = money; this._moneyCondition = moneyCondition; } private double GetMoney() { return _money *_moneyCondition; } public override double AcceptCash() { Console.WriteLine("I'm B"); return GetMoney(); } } /// <summary> ///正常销售 /// </summary> public class CashC:CashSuper { private double _money; public CashC(double money) { this._money = money; } public override double AcceptCash() { return _money; } } }
浙公网安备 33010602011771号