1. 程式人生 > >設計模式-策略模式-C++實現

設計模式-策略模式-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;
}

執行結果:
在這裡插入圖片描述