Posted on 2011-01-16 16:42
逐渐 阅读(1574)
评论(0) 编辑 收藏 引用
pimp idiom的详细说明可以访
http://www.gotw.ca/gotw/024.htm(这个网站好像被墙了,很讽刺),其实就是将定义与实现分开。
在我博客上一篇随笔《关于高内聚低偶合》提到的问题,pimp idiom对降低程序偶合有一定的帮助,下面是我的理解思路,大家有好的意见或者更好的方法可以一起讨论下:
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 }; 参数基类Para_Base和特定的算法参数类GA_Para都没有改变。
算法基类Alg_Base的模板去掉了,同时添加了一个指向参数基类Para_Base的指针成员变量,而以前用的是模板指针。并且修改了构造函数,构造函数接受一个指向Para_Base的指针并赋给m_pPara。
特定算法类GA_Alg继承自算法基类Alg_Base,但修改了构造函数,接受指向GA_Para的一个指针,然后调用父类Alg_Base的构造函数,这样的结果便是m_pPara指向的是GA_Para实例,等价于Para_Base *m_pPara = new GA_Para();
相对于上一篇提到的模板实现,pimp idiom的偶合更低些,而且pimp idiom应用也非常广泛。