该模式假定场景为商场打折促销,“正常收费”,“打几折”,“满减”,等活动。
这个场景中有如下对象:
选择促销方法对象
促销方法对象
结算对象
结构图如上
代码实现:
1 public class CashContext 2 { 3 CashSuper cs = null; 4 public CashContext(string type) { 5 switch (type) 6 { 7 case "正常收费": 8 cs = new CashNormal(); 9 break; 10 case "八折": 11 CashRebate cr = new CashRebate(0.8); 12 cs = cr; 13 break; 14 case "满300减100": 15 cs = new CashReturn(300, 100); 16 break; 17 default: 18 break; 19 } 20 } 21 22 /// <summary> 23 /// 返回核算金额 24 /// </summary> 25 /// <param name="money"></param> 26 /// <returns></returns> 27 public double GetResult(double money) { 28 return cs.acceptCash(money); 29 } 30 }
1 public abstract class CashSuper 2 { 3 /// <summary> 4 /// 核算费用 5 /// </summary> 6 /// <param name="money"></param> 7 /// <returns></returns> 8 public abstract double acceptCash(double money); 9 }
这是简单工厂融合了策略模式的一种实现。在context中通过switch创建不同促销对象,这样的好处在于其他开发人员只了解context就可以了。单纯的使用工厂模式则需要多了解2个类,这也给开发带来的难度
策略模式是一种定义一系列算法的方法,算法完成的都是相同的工作,只是实现不同。