行为模式——策略模式

简述

在策略模式中,一个类的方法可以在运行的时候动态发生更改。
使用方式:
定义一系列策略,将它们封装起来,使它们可以相互替换。

简单案例

打折策略的实现
我们平时在网上买东西经常会遇到打折活动
现在有两种打折策略,一种是满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;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值