什么是策略模式?
策略模式定义了算法家族,分别封装起来,让它们之间能够相互替换,此模式让算法的变化不会影响到使用算法
的客户。
策略模式是一种定义一系列算法的方法,从概念上看全部这些算法完毕的都是同样的工作,仅仅是实现不同,它可
以以同样的方式调用全部的算法,降低了各种算法类与使用算法之间的耦合。
策略模式的长处?
(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) //将实例化集体策略的过程由client转移到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>
设计模式—策略模式