学习 Policy based design - 读C++设计新思维-泛型编程与设计模式的应用

现在将今年读过的一些书, 感觉比较有心得的地方做一些分享. 

久闻Andrei, Alexandrescu的Modern C++ Design - Generic Programing and Design Patterns Applied是一本比较难的书,今年将其读了一遍, 确实如此, 大家如果要卒读的话,还是有一些建议:

1) 个人感觉最有用, 最核心的思想是前3章 - 基于Policy的Class  设计, 一些技术Techniques, 以及Type lists, 其中Policy based design尤为重要,可以精读理解.

2) 第4-第11章是作者以自己的思想重新实现常见的设计模式. 个人感觉现代C++的库(Boost及其他库) 有更简洁和更常用的方式,可以粗读了解一下. 

3) 如果你工作在一些大型的,注重设计的C++ Code base上, 还是不妨细读一下全书大部分章节,比如Visitors, Multimethods, 因为往往可以碰见以模板, policy实作的程序框架, 可以在扩展和修改代码的时候心里更有底.

下面来讲一讲Policy based design, 其实这个东西是多继承和模板优点的集合体. 注意到以下几点问题:

1) 多重继承可以帮助处理设计组合, 但有一些问题: 基类没有足够派生类的类型信息, 如果要操作相同的状态, 那么这个状态必须被一个虚基类持有,并由子类们虚拟继承. 修改状态就是修改基类细节, 复杂, 没有弹性.

2) 模板无法特化数据成员, 也无法对多个模板参数的模板类的成员函数进行部分特化.

3) 多继承缺乏类型信息, 模板有的是信息, 模板难于扩张(特化) ,多继承很容易扩张. 多继承的继承结构难于套用, 模板很容易被套用.

那么, 组合这两个东西, 就得到了一套类似于Strategy设计模式的,在编译期作用的技术.

template <
          class RunPolicy,
          class FlyPolicy
         >
class Bird : public RunPolicy, public FlyPolicy
{
};


class BirdOO : public IRunnable, public IFlyable
{
};
简单是吧, Bird就是Policy的Host, 要想发挥policies的威力, 应该注意:

1) 在设计的时候, 逐步将Class里的Policies分离出来, 支持"可扩充的行为", 和"优雅的机能削减".

2) 设计一簇小Policies类的时候,尽量让Policies彼此间正交, 解除彼此的依赖.

给出一个例子来说明Policy建模的威力:

需求:我们来做一个手机跑分和信息软件:

1)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值