大话设计模式之策略模式

策略模式是定义一系列算法的方法,他们可以以相同的方式调用不同的算法,减少各种算法类与使用算法类之间的耦合。
例子:超市收银,考虑打折、满减、积分满送等

//抽象算法类
abstract class CashSuper()
{
    public:
            abstract double appectCash(double money);
}
//具体的算法:
//正常收费
class CashNomal:public CashSuper()
{
  public:
          double appectCash(double money)
          {
              return money;
          }
}
//打折收费
class CashRebate:public CashSuper()
{
    private:
            double Rebate=1;
    public:
            CashRebate(string Rebate)
            {
                this.Rebate=atof(Rebate);
            }
            double appectCash(double money)
            {
                return money*Rebate;
            }
}
//等
//上下文,维护对一个策略对象的引用
//这里讲策略模式与简单工厂模式结合,减少耦合
class CashContext
{
    private:
            CashSuper cs;
    public:
            CashContext(string type)
            {
                switch(type)
                {
                    case "正常收费":
                    CashNomal cs0=CashNomal();
                    cs=cs0;
                    break;
                    case "打八折":
                    CashRebate cs0=CashRebate("0.8");
                    cs=cs0;
                    break;
                    //其他的算法
                }
            }
            double GetResult(double money)
            {
                return cs.appectCash(money);
            }
}

//客户端代码
double total=0.0;
//实例context对象

本例中存在switch选择语句,不利于改动,可用到反射技术。(后面看到再补充)
策略模式的优点:
1、析取出各种算法的公共功能
2、简化了单元测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值