設計模式-策略模式-C++實現
阿新 • • 發佈:2018-12-11
策略模式:定義一系列的演算法,把他們一個個封裝起來,並且使他們可以相互替換,使得演算法可獨立於使用它的客戶而變化。
場景:
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; }
執行結果: