狂言设计模式中简单工厂模式和策略模式的商场收银软件实例的C++代码
大话设计模式中简单工厂模式和策略模式的商场收银软件实例的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; }