Policy-based 是 C++ 的一種基于模板和繼承的設(shè)計(jì)方法。通過(guò)模板方式可以實(shí)現(xiàn)在編譯期給指定的類配置方法,而傳統(tǒng)的策略模式則是在運(yùn)行期對(duì)類的方法進(jìn)行動(dòng)態(tài)配置。
所謂設(shè)計(jì)模式?jīng)]有一定不變的使用準(zhǔn)則,同一個(gè)問(wèn)題可以有多種模式來(lái)解決,采用有效的設(shè)計(jì)模式可以減少重復(fù)性代碼以及用最小的改動(dòng)來(lái)應(yīng)對(duì)變化。多了解一種模式,可以增加一種解決問(wèn)題的思路。

該模式中的繼承是 implement-by 的關(guān)系,而非 Is-A 的關(guān)系,其重點(diǎn)是模板而非繼承。
假設(shè)一個(gè)類提供一個(gè)對(duì)外的接口,但在不同的場(chǎng)景中有不同的實(shí)現(xiàn)方式,以下是一種常見(jiàn)的實(shí)現(xiàn)代碼:
class demoClass{public: void func(int type){ //根據(jù)場(chǎng)景指定實(shí)現(xiàn)方式 switch (type) { case 1: func1(); break; case 2: func2(); break; case 3: func3(); break; default: break; } }private: void func1() { cout << "used func1" << endl; }//不同的實(shí)現(xiàn)方式 void func2() { cout << "used func1" << endl; } void func3() { cout << "used func1" << endl; }};在以上代碼中通過(guò)傳入一個(gè)標(biāo)記參數(shù) type 來(lái)實(shí)現(xiàn)不同的方法調(diào)用,當(dāng)需要增加更多的實(shí)現(xiàn)方式時(shí),需要在類的方法中增加相應(yīng)的判斷代碼,對(duì)既有代碼進(jìn)行修改意味著增加了出錯(cuò)的可能。
上述問(wèn)題的解決可以有多種方式,本文記錄一下 Policy-based design 方式。
template<typename T>class demoClass:public T{};class func_policy1{public: void func() { cout << "used func1" << endl; }};class func_policy2{public: void func() { cout << "used func2" << endl; }};int main(){ demoClass<func_policy1> demo; demo.func(); system("pause"); return 0;}
圖片
本文鏈接:http://m.www897cc.com/showinfo-26-71933-0.htmlC++ 慣用法之 Policy-based design
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: 瀏覽器也擁有了原生的 “時(shí)間切片” 能力!
下一篇: Cron表達(dá)式語(yǔ)法全解析