Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1741492
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: C/C++

2012-03-25 19:15:14

你是房地产商,买了一块地,现在找一些二级承包商来帮你建房子。为了防止倒楼事故,你严格要求承包商要按规定流程建房子,地基、扑砖、铺房顶、安门窗。缺一不可。

你可以用一个抽象类来控制这个流程:


  1. class Builder
  2. {
  3. public:
  4.     void Build()
  5.     {
  6.         BuildFundation();
  7.         BuildWall();
  8.         BuildRoof();
  9.         BuildWindow();
  10.     }
  11.     virtual void BuildFundation() = 0;
  12.     virtual void BuildWall() = 0;
  13.     virtual void BuildRoof() = 0;
  14.     virtual void BuildWindow = 0();
  15. };

所有的承包商必须继承这个类,并实现所有的纯虚函数。如此一来,你就可以严格控制流程。

有些流程是必需的,但有些流程是可选的。比如你有的房子建好后可以装修,有的也可以不装修。这时你可以:


  1. class Builder
  2. {
  3. public:
  4.     void Build()
  5.     {
  6.         BuildFundation();
  7.         BuildWall();
  8.         BuildRoof();
  9.         BuildWindow();
  10.         
  11.         Decorate();
  12.     }
  13.     virtual void BuildFundation() = 0;
  14.     virtual void BuildWall() = 0;
  15.     virtual void BuildRoof() = 0;
  16.     virtual void BuildWindow = 0();

  17.     
  18.     virtual void Decorate() {} // It's a hook
  19. };

上面的Decorate就是一个可选的流程,子类可以覆写它,也可以不管它。这样的函数称为Hook。

模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

好莱坞原则:别调用(打电话给)我们,我们会调用(打电话给)你。

好莱坞原则和依赖倒置原则的关系:依赖倒置原则倾向于尽量避免具体类,而多使用抽象;好莱坞原则是避免底层结构依赖于高层结构。

 

模板方法模式与策略模式的比较:模板方法模式需要定制的内容是一个完整算法的一部分;而策略模式里每一个定制的内容都是一个完整的算法。

阅读(779) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~