模板模式(学习笔记)

模板模式

模板模式看起来很简单,看起来。。。。

先看一下uml图吧:

这不就是一个继承么?!子类完成超类的抽象方法?!

重要的是templeteMethod();可以看到,它规定的operation1与operation2的执行顺序。

定义:定义一个操作中的算法(也就是上图中的templeteMethod方法)的骨架,而将一些步骤延迟到子类中。

模板方法可以说,使用了代码复用最常用的方式——继承,显然,这么设计,减少了工作量。更重要的是,它给了某种算法(templeteMethod方法)制定了约束,确定这个算法所使用的操作的顺序。而具体的某种操作如何实现可以留给子类。

好处:

1.      一次性实现一个算法的不变部分,并将可变行为留给子类来实现。

2.      集中各个子类中的公共行为并将其置入一个公共父类中,以避免代码重复。

3.      为控制子类扩展超类操作的方式,可定义在特定点调用“钩子”操作的模板方法,以允许在这些点进行扩展

注意(或者说是是实现技巧):

1.必须被子类重载的操作应定义为抽象的

2.如果模板方法本身不应被子类重载,应定义为final的

3.为允许子类在一个算法操作的特定点插入代码,将“钩子”操作插入模板方法。这些钩子操作可能默认为什么也不做

4. 使子类必须重载的操作数量最少化,否则开发者会感觉模板方法很乏味。

5.在模板方法中,父类调用子类的操作而不是相反。这是一种反向的控制结构,有时称作“好莱坞法则”,即“别找我们,我们找你”

例子:

最好的例子就是,算法老师讲算法时,总是给你一些伪代码,甚至是自然语言!!你就可以把这些伪代码抽象为一个模板函数。然后定义子类去具体实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值