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

版权声明:本文为博主原创文章,未经同意不允许转载! https://blog.csdn.net/wb175208/article/details/84558187

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

场景:
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;
}

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

猜你喜欢

转载自blog.csdn.net/wb175208/article/details/84558187