大話設計模式中簡單工廠模式和策略模式的商場收銀軟體例項的C++程式碼
阿新 • • 發佈:2019-01-05
策略模式是一種定義一系統演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是具體的實現不同;策略模式可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦合。
策略模式是用來封裝演算法的,但在實踐中,我們發現可以用它來封裝幾乎任何型別的規則,只要在分析過程中遇到需要在不同時間應用的業務原則,就可以考慮策略模式來處理這種變化的可能性。
當不同的行為堆砌在一起時,難免會使用條件語句來選擇合適的行為。將這些行為封裝在一個個獨立的策略演算法中,可以在使用這些行為的類中消除條件語句。
需求:商場可能會搞各種活動,甚至每一種商品都會打折,還會有諸如滿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; }