设计模式-策略模式-C++实现

策略模式:定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换,使得算法可独立于使用它的客户而变化。

场景:
1.许多相关的类仅仅是行为上优异;
2.需要一个算发的不同实现;
3.一个类中定义了多种行为,并且以多个条件语句的形式出现。

例子:
北京公交卡的使用,在小于100元的时候不打折,在大于100元小于150元的情况下可以打八折,超过150元小于400元的情况可以打五折,超过400元不在打折。

#include <stdio.h>

class CardCharging {
public:
	virtual void charging() {

	}
};

class FullCard :public CardCharging {
public:
	virtual void charging() {
		printf("使用全价票!\n");
	}
};

class HalfCard :public CardCharging {
public:
	virtual void charging() {
		printf("使用半价票!\n");
	}
};

class ThreeCard :public CardCharging {
public:
	virtual void charging() {
		printf("使用三折票!\n");
	}
};

class UseCard {
public:
	void useCard(int p) {
		if (p<=100){
			cc = new FullCard;
		} else if(p>100 && p <= 150) {
			cc = new HalfCard;
		} else if(p>150 && p <= 400){
			cc = new ThreeCard;
		} else if(p > 400) {
			cc = new FullCard;
		}

		cc->charging();
	}
private:
	CardCharging* cc = nullptr;
};

int main() {
	UseCard* uc = new UseCard;
	uc->useCard(90);
	uc->useCard(135);
	uc->useCard(200);
	uc->useCard(450);
	return 0;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值