Posted on 2011-01-16 16:42
逐漸 閱讀(1589)
評(píng)論(0) 編輯 收藏 引用
pimp idiom的詳細(xì)說(shuō)明可以訪
http://www.gotw.ca/gotw/024.htm(這個(gè)網(wǎng)站好像被墻了,很諷刺),其實(shí)就是將定義與實(shí)現(xiàn)分開。
在我博客上一篇隨筆《關(guān)于高內(nèi)聚低偶合》提到的問(wèn)題,pimp idiom對(duì)降低程序偶合有一定的幫助,下面是我的理解思路,大家有好的意見或者更好的方法可以一起討論下:
1 class Para_Base
2 {
3 //
4 };
5
6 class GA_Para
7 :public Para_Base
8 {
9 //
10 };
11
12 class Alg_Base
13 {
14 public:
15 Alg_Base(Para_Base *p)
16 :m_pPara(p) { }
17 //
18 protected:
19 Para_Base *m_pPara;
20 };
21
22 class GA_Alg
23 :public Alg_Base
24 {
25 //
26 public:
27 GA_Alg(GA_Para *pGA)
28 :Alg_Base(pGA) { }
29 }; 參數(shù)基類Para_Base和特定的算法參數(shù)類GA_Para都沒有改變。
算法基類Alg_Base的模板去掉了,同時(shí)添加了一個(gè)指向參數(shù)基類Para_Base的指針成員變量,而以前用的是模板指針。并且修改了構(gòu)造函數(shù),構(gòu)造函數(shù)接受一個(gè)指向Para_Base的指針并賦給m_pPara。
特定算法類GA_Alg繼承自算法基類Alg_Base,但修改了構(gòu)造函數(shù),接受指向GA_Para的一個(gè)指針,然后調(diào)用父類Alg_Base的構(gòu)造函數(shù),這樣的結(jié)果便是m_pPara指向的是GA_Para實(shí)例,等價(jià)于Para_Base *m_pPara = new GA_Para();
相對(duì)于上一篇提到的模板實(shí)現(xiàn),pimp idiom的偶合更低些,而且pimp idiom應(yīng)用也非常廣泛。