设计模式:策略模式(C++)【诸葛亮的锦囊妙计】
序言
今天帶領(lǐng)大家一起來(lái)學(xué)習(xí)下策略模式,看到策略二字,就讓筆者想到了謀略,想到了三國(guó),那個(gè)謀士如云、英雄輩出的年代。遙想公瑾當(dāng)年,小喬初嫁了,雄姿英發(fā)。咳咳,扯回來(lái)。我們所說(shuō)的策略 ,從字面意思就是一個(gè)好的辦法,對(duì)應(yīng)我們編程來(lái)說(shuō)就是一個(gè)好的方法 而且這個(gè)方法得站在一個(gè)高度,從編程的整體的角度要做到解耦合可擴(kuò)展,我想用什么策略就用什么策略 ,下次我又想到了好策略還不會(huì)更改現(xiàn)有的代碼!這就是策略模式。沒(méi)懂?請(qǐng)繼續(xù)....
策略模式場(chǎng)景化
我們拿劉備江東就親的事 說(shuō)起,諸葛亮給趙云 3條錦囊妙計(jì)(也就3個(gè)策略),讓趙云在合適的時(shí)候打開(kāi) 然后按照策略行事。
這個(gè)3條 妙計(jì) 有直接 告訴子龍嗎?當(dāng)然沒(méi)有,不然就不靈了(面向接口編程,讓客戶知道的越少越好)。這些妙計(jì)是不是都是策略,是不是應(yīng)該實(shí)現(xiàn)同一個(gè)策略接口?每個(gè)不同的妙計(jì)或者說(shuō)策略(算法) 都有不同的實(shí)現(xiàn),這樣也更有擴(kuò)展 后序再添加 策略只需要實(shí)現(xiàn)接口就行了。
那么我們?cè)賮?lái)看看趙云(策略使用者),趙云使用策略不需要知道 這個(gè)策略 諸葛亮是如何想出來(lái)這個(gè)妙計(jì),他只管打開(kāi)妙計(jì) 按計(jì)而行 就可以,那么趙云 只需要擁有 一個(gè)策略接口的實(shí)例 就可以了。如果 諸葛亮下次 又有了新的妙計(jì),趙云依舊可以 使用新的策略。因?yàn)槭敲嫦蚪涌诰幊搪铩?/p>
策略模式代碼
前面啰嗦那么多,策略模式總的來(lái)說(shuō) 就是 將算法進(jìn)行封裝,并且面向接口編程。策略使用者 包含策略接口 ,設(shè)置好策略,然后可以使用策略了。直接看代碼吧,代碼很簡(jiǎn)單 主要是 這種封裝 和 面向接口編程的思想 一定要領(lǐng)悟。
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std;//策略接口,抽象類 //所有妙計(jì)的基類,具體策略 自己實(shí)現(xiàn)去。 class Strategy { public:virtual void doSomeThing() = 0;//純虛函數(shù) };//具體的策略,具體的實(shí)現(xiàn)算法 //諸葛亮的錦囊妙計(jì) //第一條妙計(jì) class StrategyFirst:public Strategy {void doSomeThing(){cout << "一、拜見(jiàn)喬國(guó)老,并把劉備娶親的事情搞得東吳人盡皆知" ;} };//第二條妙計(jì) class StrategySecond :public Strategy {void doSomeThing(){cout << "二、用謊言(曹操打荊州)騙泡在溫柔鄉(xiāng)里的劉備回去" ;} };//第三條妙計(jì) class StrategyThird :public Strategy {void doSomeThing(){cout << "三、讓孫夫人擺平東吳的追兵,她是孫權(quán)妹妹,東吳將領(lǐng)懼她三分" ;} };//策略上下文,也就是使用策略的環(huán)境 //趙云拆錦囊 class StategyContext { public://使用策略(執(zhí)行具體的算法)//趙云拆錦囊void useStrategy(){cout << "趙云打開(kāi)錦囊->";this->strategy->doSomeThing();cout << "->趙云關(guān)閉錦囊" << endl;return;}//設(shè)定 策略void setStrategy(Strategy* strategy){this->strategy = strategy;} private:Strategy* strategy; };int main(int argc, char *argv[]) {StategyContext zhaoYun;//趙云StrategyFirst first;//第一條妙計(jì)StrategySecond second;//第二條妙計(jì)StrategyThird third;//第三條妙計(jì)//設(shè)定具體策略,然后使用策略zhaoYun.setStrategy(&first);zhaoYun.useStrategy();zhaoYun.setStrategy(&second);zhaoYun.useStrategy();zhaoYun.setStrategy(&third);zhaoYun.useStrategy();return EXIT_SUCCESS; }
運(yùn)行結(jié)果
總結(jié)
以上是生活随笔為你收集整理的设计模式:策略模式(C++)【诸葛亮的锦囊妙计】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 十四、汇编指令(存储、加法、减法、乘法、
- 下一篇: 《论文笔记》Adaptive decen