什么是策略模式?
策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化不会影响到使用算法
的客户。
策略模式是一种定义一系列算法的方法,从概念上看所有这些算法完成的都是相同的工作,只是实现不同,它可
以以相同的方式调用所有的算法,减少了各种算法类与使用算法之间的耦合。
策略模式的优点?
(1)策略模式的Strategy类层为Context类定义了一系列的可供重用的算法和行为。继承有助于析取出这些算法
的公共功能。
(2)简化了单元测试(每个算法都有自己的类,可以通过自己的接口单独测试)
策略模式的不足?
Context中包含了switch语句,修改需求时需要改Context中的代码。(解决办法,反射技术)
策略模式的使用条件?
策略模式是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听
到要在不同时间应用不同的业务规则,就可以考虑利用策略模式处理这种变化的可能性。
Eg:
(1)产品之于加减乘除,水果之于苹果梨橘子香蕉,文具之于笔尺刀,这时产品比较具体、有限和没有多个算
法重叠,这时实用简单工厂模式。
(2)产品之于商场促销中的返利(可为300返100、500返200、10000返500等等无数)、折扣(2折、2.5折、6
折、9折、9.1折等等无数)、正常购买、消费积分(100元10积分、200元30积分等等无数),这时产品构造又多次重
叠,且有在不同时刻应用不同的规则时使用策略模式。
策略模式的结构图?
简单工厂与策略模式的区别与联系?
简单工厂模式只是解决了对象的创建问题,工厂需要包括所有的产品对象的创建,如果产品对象形式经常变化,
就需要经常改动工厂,以致代码重新编译。所以策略模式就诞生了,策略模式---它定义了算法家族,分别封装起
来,而不是像简单产品模式一样定义所有的产品类,让他们之间可以互相替换,此模式让算法的变化,不会影响到使
用算法的客户,使客户拥有相同的访问过程。
简单工厂和策略模式两个核心?
简单工厂的核心:封装所有的产品对象
策略模式的核心:封装算法
实战:商场促销系统结构图与代码展示
(1)商场促销UML图
(2)CashContext类中的代码
<span style="font-family:KaiTi_GB2312;font-size:18px;">class CashContext
{
CashSuper cs = null; //声明一个CashSuper变量
public CashContext(string type)
{
switch (type) //将实例化集体策略的过程由客户端转移到Context类中,简单工厂的应用
{
case "正常收费":
CashNomal cs0 = new CashNomal();
cs=cs0;
break;
case "满300返100":
CashReturn cr1 = new CashReturn("300","100");
cs = cr1;
break;
case "打8折";
CashRebate cr2 = new CashRebate("0.8");
cs = cr2;
break;
}
public dopuble GetResult(double money)
{
return cs.acceptCash(money);
}
}
}</span>