简述
在策略模式中,一个类的方法可以在运行的时候动态发生更改。
使用方式:
定义一系列策略,将它们封装起来,使它们可以相互替换。
简单案例
打折策略的实现
我们平时在网上买东西经常会遇到打折活动
现在有两种打折策略,一种是满100减20,另一种是打8折
请使用策略模式来实现上述打折功能。
1. 打折策略基类
//打折策略基类
class DiscountStrategy {
public:
virtual double DoDiscount(double money) {
return money;
}
};
2. 打折策略子类
这里的子类就是具体的策略实现类:
//策略1:满100减20
class Strategy1 : public DiscountStrategy {
public:
virtual double DoDiscount(double money) {
int tmp = (int)money / 100;
return money - 20 * tmp;
}
};
//策略2:打85折
class Strategy2 : public DiscountStrategy {
public:
virtual double DoDiscount(double money) {
return money * 0.8;
}
};
3. 具体的打折实现类
打折类来选择具体的策略实现类
//打折类
class Discount {
DiscountStrategy* disStrategy = NULL;
public:
Discount(DiscountStrategy* strategy)
: disStrategy(strategy) {};
void ResultOfDisCount(double money) {
double tmp = money;
money = disStrategy->DoDiscount(money);
cout << "原价:" <<tmp<< "***折后价:" <<money<< endl;
}
};
4. 测试结果
int main()
{
Discount* discount1 = new Discount(new Strategy1());
discount1->ResultOfDisCount(218);
Discount* discount2 = new Discount(new Strategy2());
discount2->ResultOfDisCount(218);
return 0;
}