大话设计模式中简单工厂模式和策略模式的商场收银软件实例的C++代码
策略模式是一种定义一系统算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是具体的实现不同;策略模式可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
策略模式是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中遇到需要在不同时间应用的业务原则,就可以考虑策略模式来处理这种变化的可能性。
当不同的行为堆砌在一起时,难免会使用条件语句来选择合适的行为。将这些行为封装在一个个独立的策略算法中,可以在使用这些行为的类中消除条件语句。
需求:商场可能会搞各种活动,甚至每一种商品都会打折,还会有诸如满300减100的其它优惠活动,因此收银时都需要考虑这些情况,甚至要考虑怎样处理期货的活动,比如遇到节日时搞个折上折等等。
下面为整个的代码,不足之处还请指正:
/* 策略模式的例子实现 2012-11-08 */#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 CashRebate:public CashSuper{private:double moneyRebate;public:CashRebate(double moneyRebate){this->moneyRebate = moneyRebate;}double acceptCash(double money){return money * moneyRebate;}};class CashReturn : public CashSuper{private:double moneyCondition ;double moneyReturn;public:CashReturn(double moneyCondition,double moneyReturn){this->moneyCondition = moneyCondition;this->moneyReturn = moneyReturn;}double acceptCash(double money){double result = money;if( money >= moneyCondition ) {result = money - (money/moneyCondition)*moneyReturn;}return result;}};//CaseContext类class CashContext {private:CashSuper *cs;public:CashContext(CashSuper *csuper){this->cs = csuper;}CashContext( int type ){switch(type){case 1: //正常模式cs = new CashNormal();break;case 2://满三百减一百cs = new CashReturn(300,100);break;case 3://八折cs = new CashRebate(0.8);break;}//switch}double GetResult ( double money ){return cs->acceptCash(money);} ~CashContext() { delete cs; }};int main(){double total = 0;CashContext *csuper = new CashContext(2);double totalPrices = 0;totalPrices = csuper->GetResult(300.0);total = total+totalPrices;cout << " total = "<<total<<endl;return 0;}