策略模式

来源:互联网 发布:looper软件下载 编辑:程序博客网 时间:2024/05/16 05:27


策略模式:它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法变化,不会影响到使用算法的客户策略模式就是用来封装算法的,但在实践中,我们发现可以用它来,封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。


#include <iostream>  #include <string>  using namespace std;  // 抽象类  class CashSuper  {  public:      virtual double AcceptCash(double money) = 0;  };  // 普通收费类  class CashNormal : public CashSuper  {  public:      double AcceptCash(double money)      {          return money;      }  };  // 打折收费类  class CashDiscount : public CashSuper  {  public:      CashDiscount(double dis):discount(dis){}      double AcceptCash(double money)      {          return money * discount;      }      double discount;  };  // 返还收费类  class CashBack : public CashSuper  {  public:      CashBack(double condition, double returnmoney):MoneyCondition(condition), moneyReturn(returnmoney){}      double AcceptCash(double money)      {          double returnm;          if (money > MoneyCondition)          {              returnm = money - moneyReturn;          }          return returnm;      }      double MoneyCondition;      double moneyReturn;  };  // 策略类  class Strategy  {  public:      Strategy(string str)      {          if (str == "普通")          {              cash = new CashNormal();          }          else if (str == "打8折")          {              cash = new CashDiscount(0.8);          }          else if(str == "返还")          {              cash = new CashBack(300, 100);          }      }      double GetResult(double mon)      {          return cash->AcceptCash(mon);      }      CashSuper *cash;  };  void main()  {      double total;      Strategy *str = NULL;      str = new Strategy("返还");      total = str->GetResult(500);      cout << total << endl;      delete str;}

该程序时模拟商场收银的一个简单功能,有普通收费,打折收费,返还收费定义了一个抽象类和三个派生类,并且通过策略类封装了算法的实现,用户看不到真正的算法代码,使耦合度大大降低。







原创粉丝点击