策略模式是用来封装算法的。此模式让算法的变化,不会影响到使用算法的客户。
在上一篇博客:简单工厂模式中,例子2也可以用策略模式实现,封装算法。基类和三个子类不需要改动,只需要添加策略类,并将工厂类中的代码整合进策略类!具体如下:
例子2:输入:商品的单价和数量
输出:消费额
//类的设计
基类: {acceptCash(double money)} //计算消费额的虚函数,参数为原价,返回当前价
子类:正常收费{acceptCash(double money)} //虚函数具体实现
子类:打折促销
{moneyRebate;//折扣率
CashRebate(string moneyRebate)//构造函数,设置折扣率
acceptCash(double money)//虚函数具体实现}
子类:满减促销
{moneyCondition,moneyReturn;//消费满金额,消费减金额
CashReturn(string moneyCondition,string moneyReturn)//构造函数,设置满减参数
acceptCash(double money)//虚函数具体实现}
…… //更多子类,按需设计
策略类:{CashSuper cs;//一个基类对象
CashContext(CashSuper csuper) //构造函数,传入具体的收费策略,用以实例化cs
GetResult(double money)//根据收费策略的不同,获得计算结果}
//类结构图