策略模式:定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换,使得算法可独立于使用它的客户而变化。
场景:
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;
}
运行结果: