程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 大話設計模式C++實現-第2章-策略模式

大話設計模式C++實現-第2章-策略模式

編輯:C++入門知識

大話設計模式C++實現-第2章-策略模式


一、UML圖

vcjDy+O3qLXEseS7r6Ossru74dOwz+y1vcq508PL47eotcS/zbunoaM8L3A+CjxwPjxzdHJvbmc+yP2hotPFteM8L3N0cm9uZz48L3A+CjxwPqOoMaOpst/C1MSjyr3Kx9K71ta2qNLl0rvPtcHQy+O3qLXEt723qKOstNO4xcTuyc/AtL+0o6zL+dPQ1eLQqcvjt6jN6rPJtcS2vMrHz+DNrLXEuaTX96Os1rvKx8q1z9ayu82so6zL+7/J0tTS1M/gzay1xLe9yr2199PDy/nT0LXEy+O3qKOsvPXJ2cHLuPfW1svjt6jA4NPryrnTw8vjt6jA4NauvOS1xPHuus+hozwvcD4KPHA+o6gyo6my38LUxKPKvbXEU3RyYXRlZ3nA4NT4ysfOqkNvbnRleHS2qNLlwcvSu9CpwdC1xL/JuanW2NPDtcTL47eou/LQ0M6qoaO8r7PJ09DW+tPazvbIobP21eLQqcvjt6jW0LXEuau5srmmxNyhozwvcD4KPHA+o6gzo6my38LUxKPKvbzyu6/By7Wl1Kqy4srUo6zS8s6qw7+49svjt6i2vNPQ19S8urXEwOCjrL/J0tTNqLn919S8urXEvdO/2rWltsCy4srUoaM8L3A+CjxwPqOoNKOpst/C1MSjyr2+zcrH08PAtLfi17DL47eotcShozwvcD4KPHA+o6g1o6nWu9Kq1Nq31s72uf2zzNbQzP21vdDo0qrU2rK7zazKsbzk06bTw7K7zay1xNK1zvG55tTyo6y+zb/J0tS/vMLHyrnTw7LfwtTEo8q9tKbA7dXi1tax5LuvtcS/ycTc0NShozwvcD4KPHA+o6g2o6m88rWluaSzp8Sjyr3Q6NKqyMO/zbuntsvIz8q2wb249sDgo6y2+LLfwtTEo8q9us288rWluaSzp8Sjyr294brPtcTTw7eoo6y/zbuntsvWu9Do0qrIz8q20ru49sDgQ29udGV4dLy0v8mhozwvcD4KPHA+PHN0cm9uZz7LxKGiQyYjNDM7JiM0MzvKtc/WPC9zdHJvbmc+PC9wPgo8cD6jqDGjqbLfwtSjulN0cmF0ZWd5Lmg8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;">#ifndef STRATEGY_H #define STRATEGY_H #include #include //父類抽象類 class CashSuper { public: virtual double acceptCash(double money)=0; }; //子類:正常付費類型 class CashNormal:public CashSuper { public: double acceptCash(double money) { return money; } }; //子類:返現類型 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-floor(money/moneyCondition)*moneyReturn; return result; } }; //子類:打折扣類型 class CashRebate:public CashSuper { private: double moneyRebate; public: CashRebate(double moneyRebate) { this->moneyRebate=moneyRebate; } double acceptCash(double money) { return money*moneyRebate; } }; #endif STRATEGY_H

(2)策略:CashContext.h

#ifndef CASHCONTEXT_H
#define CASHCONTEXT_H

#include "Strategy.h"
//策略類
class CashContext
{
private:
	CashSuper* cs;
public:
	CashContext(int type):cs(NULL)
	{
		switch(type)
		{
		case 1:
			{
				CashSuper* cn=new CashNormal();
				cs=cn;
				break;
			}
		case 2:
			{
				CashSuper* cr1=new CashReturn(300,100);
				cs=cr1;
				break;
			}
		case 3:
			{
				CashSuper* cr2=new CashRebate(0.8);
				cs=cr2;
				break;
			}
		default:;
		}
	}

	double GetResult(double money)
	{
		return cs->acceptCash(money);
	}
};

#endif


(3)客戶端:main.h

#include "CashContext.h"
#include 
#include 

void main()
{
	double total=0;
	double totalPrices=0;
	
	//正常收費
	CashContext* cc1=new CashContext(1);
	totalPrices=cc1->GetResult(300);
	total+=totalPrices;
	std::cout<<"Type:正常收費  totalPrices:"<GetResult(700);
	total+=totalPrices;
	std::cout<<"Type:滿300返100  totalPrices:"<GetResult(300);
	total+=totalPrices;
	std::cout<<"Type:打8折  totalPrices:"<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved