zhujian

揣着梦想骑驴找马但不虐待驴
posts - 10, comments - 7, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于高内聚低偶合

Posted on 2011-01-13 20:43 逐渐 阅读(1961) 评论(4)  编辑 收藏 引用
最近遇到的一个问题,大伙来讨论一下,希望得到高手的指点,代码的结构是这样的:

 1 class Para_Base
 2 {
 3     
 4 };
 5 
 6 class GA_Para
 7     :public Para_Base
 8 {
 9         
10 };
11 
12 template <typename Para_Type>
13 class Alg_Base
14 {
15     //
16     shared_ptr<Para_Type> m_pPara;
17 };
18 
19 class GA_Alg
20     :public Alg_Base<GA_Para>
21 {
22     
23 }

解释一下,一个参数基类,是各种算法参数的公共基类,第二个类是GA算法的参数类,继承自Para_Base,第三个类是各种算法的基类,是个模板类,模板参数类型是算法参数类型,如GA_Para,第4个类是GA算法类,继承自Alg_Base,这样m_pPara对不同的算法指向不同的参数,但这样改动一下代码,程序得从头重新编译,因为程序库的确比较大,编译起来挺花时间的,(这是师兄带我写的一个智能演化算法的库,即将完成,我们打算开源,完成后再通告大家)大家有没有更好的设计方法,比如把定义与实现分开,还望大家多发表些意见,不胜感激。



Feedback

# re: 关于高内聚低偶合  回复  更多评论   

2011-01-13 21:20 by yrj
去掉模板,用指针

# re: 关于高内聚低偶合  回复  更多评论   

2011-01-14 10:34 by 逐渐
这我也想过,这样每个类都得一个m_pPara,不然父类如何把指针向下转换@yrj

# re: 关于高内聚低偶合  回复  更多评论   

2011-01-20 23:48 by arrow8209
如果从设计角度上说,你这样做没有问题。但是你从编译效率说所有的模板编译效率都不高,但是模块的好处又不得不使用它。我个人建议你看看“策略模式”,也许对你会有一些启发。在就是从实际角度出发你写这些代码的目的是什么,根据你最终的目的和实际的需求来做,如果说你代码是一第三库的形式提供给他人使用,当然是用模板好了,如果你是自己代码内部使用,他就要考虑你代码健壮性、可读性、可扩展性等等,总体来说以你的现在和未来的需求来确定你用什么方法。不要在注重某一个方面的的得失,而是从整体上考虑。
就我个人来说 我会这样设计,不知道符不符合你的要求:
class Para_base{}
class Algo_base{}
class AlgoSys
{
Para_base m_pPara_base;
Algo_base m_pAlgo_base;
//调用算法类的方法
void Call()
{
//每个算法肯定知道他的参数应该是什么
m_pAlgo_base(m_pPara_base);
}
}

# re: 关于高内聚低偶合  回复  更多评论   

2011-01-21 20:18 by 逐渐
@arrow8209
这种设计模式挺好,但是特定算法与参数存在向下转换问题,添加算法增多,不同算法差异增大的话可能会有些麻烦.谢谢你,我再想想....

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理