《Head First Design Patterns》笔记九:模版模式(Template Method Pattern)

 概述

     模版的应用,可谓是遍地都是.我们每天上着似曾相识的论坛,天天重复按着模版套写文档.天上飞的,地上跑的,大多是各种模版套出来的.区别只是细微地方不一样,可以说模版就是让我们最大化的重用现有已存在的事物.这也许就是模版模式有人称之为最重要的模式(之一)的原因.设计模式一个承诺不就是实现重用吗.

实例分析

    我们直接先来看个实例分析吧,我们现在来写段代码泡茶叶和泡咖啡的,这2样可以说是全世界最风靡的饮料,什么原因呢,因为它们有个共同点,都含有咖啡因,可以让人兴奋,并上瘾.

    那么我们来开始写tea和coffee的实现了

    Coffee 具体步骤如下 煮开水,煮咖啡,倒咖啡,加牛奶,加糖

 Tea 具体步骤如下:煮开水,泡茶,倒茶,加柠檬

 

 

很好,但我们发现基本步骤是差不多,甚至部分是完全重复的,那么为了避免冗余代码,方便我们修改,或则有新的饮料出现,我们可以使用模板.首先我们定义什么是模版,模版就是:在一个方法里定义一个算法的框架.部分步骤延迟到子类里实现.模版模式让子类实现模版模版的框架,又可以对局部进行微调.uml图示如下

 

那么针对泡茶和泡咖啡就可以设计1套共用的模版了:煮开水,泡茶(咖啡),倒到杯子里,加料(柠檬/牛奶,糖),煮开水和倒饮料在父类里直接实现,具体泡 和 加料的方式在子类里实现. uml设计如下:

 

代码实现

   分析完了,实现就是机械行为了:代码如下

   1:首先是abstract模版类 :定义好模版

 

  2 :子类咖啡和茶 继承模版父类,重载泡 和 加料的 方法:

 

3:然后就是测试了,代码如下

 

测试运行结果:

Boiling  water
Steep tea bag into cup
Pouring  into  cup:
Adding lemon
Boiling  water
Dripping  Coffee through filter
Pouring  into  cup:
Adding  milk and sugar

 

思考 :

    这个模式不可谓不简单.但应用及其广泛,.net大量的类库也采用了这种模式.,代码重用重要性大家都很清楚,其实这个模式跟策略模式很相像,而且策略模式更灵活,不过模版模式优点在于他给出了一个框架,让子类继承,主的框架还是不变,策略模式则是完全让用户选择所需要用到的策略.

    另外对于模板模式需要子类实现的步骤有2种,1种是抽象步骤,必须由子类实现,一种是虚步骤,模板给出一个默认的实现,子类可选择override,也可选择默认的步骤。用哪种用户自己可以考量了。

   这里可以看出,虽然整个模板实际运行是由父类和子类的实现的步骤交叉运行,但子类完全不需要了解父类在做什么。上一步怎么做,下一步做什么,子类完全不去管,这也是面向对象的一个重要原则,“don't call us, we'll call u ",底层组件不允许去直接调用高层组件。这也被戏称为好莱坞原则

 

 

下一篇:《Head First Design Patterns》笔记十:迭代器模式(Iterator Pattern)

上一篇:《Head First Design Patterns》笔记八:外观模式(Facade Pattern)

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值