电脑搭建网站步骤,网站开发课设,男友给女朋友做网站,白领兼职做网站来源#xff1a;http://blog.csdn.net/wulingmin21/article/details/6712684 策略模式定义了一系列的算法#xff0c;并将每一个算法封装起来#xff0c;而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 例如#xff1a; CashNormal、CashRebate…来源http://blog.csdn.net/wulingmin21/article/details/6712684 策略模式定义了一系列的算法并将每一个算法封装起来而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 例如 CashNormal、CashRebate、CashReturn三种算法正常收费、打折收费、返利收费都继承CashSuper。如果还有别的收费方式再写一个类继承CashSuper。通过对CashContext的GetResult方法调用可以得到收取费用的结果。通过构造方法传入具体的收费策略。
class CashContext
{ private CashSuper cs; public CashContext(CashSuper csuper) { this.cs csuper; } public double GetResult(double money) { return cs.acceptCash(money); } } 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。也就说实例化谁。 class CashFactory
{ public static CashSuper createCashAccept(string type) { CashSuper cs null; switch (type) { case 正常收费: cs new CashNormal(); break; case 满X返Y: CashReturn cr1 new CashReturn(X, Y); //X、Y为具体的数值 cs cr1; break; case 打Z折: CashRebate cr2 new CashRebate(0.Z); //Z为具体的数值 cs cr2; break; } return cs; }
} 很明显能看出策略模式和简单工厂模式不同点。 在简单工厂中如果增加了新类那么这个工厂也要随之更改。在策略模式中虽然CashContext中不用更改但它的客户端的代码就要更改了客户端代码有条件判断语句如果增加了其它的就需要改动了。最后将策略与简单工厂结合 class CashContext
{ CashSuper cs null; public CashContext(string type) { switch (type) { case 正常收费: CashNormal cs0 new CashNormal(); cs cs0; break; case 满X返Y: CashReturn cr1 new CashReturn(X, Y); cs cr1; break; case 打Z折: CashRebate cr2 new CashRebate(0.Z); cs cr2; break; } } public double GetResult(double money) { return cs.acceptCash(money); }
} 客户端就不用去判断了。但是如果有别的需求还是要改动Switch中的代码。