大话设计模式2-策略模式
1.需求:商场促销
商场有不同的促销情况,可以打折、满减以及不促销
2.简单工厂实现
简单工厂实现可以①设计一个收费抽象类,交给子类去重写
#pragma once
class cashSuper {
public :
virtual double acceptCash(double money)
{
return money;
}
};
②再定义正常收费、满减、打折三个子类。
正常收费
#pragma once
#include"cashSuper.h"
class cashNomal :public cashSuper {
public:
double acceptCash(double money)
{
return money;
}
};
打折
#pragma once
#include"cashSuper.h"
class cashRebate :public cashSuper {
public:
cashRebate(double bate = 1):rebate(bate){
}
double acceptCash(double money){
return money*rebate;
}
private:
double rebate;
};
满减
构造时需要两个参数分别是满减条件以及满减金额
#pragma once
#include"cashSuper.h"
class cashReturn :public cashSuper {
private:
double moneycond;
double moneyret;
public:
cashReturn(double cond,double ret):moneycond(cond),moneyret(ret){
}
double acceptCash(double money)
{
double res = money;
if (money > moneycond)
res = money - int((money / moneycond))* moneyret;
return res;
}
};
③之后是工厂类,用来实例化合适的对象
#pragma once
#include"cashNormal.h"
#include"cashRebate.h"
#include"cashReturn.h"
#include"cashSuper.h"
using namespace std;
enum typeset{
nomal,rebate,ret};