设计模式—模板模式
来源:互联网 发布:zookeeper nginx 集群 编辑:程序博客网 时间:2024/05/21 09:50
今天又约见高中同学去了。果然一放假就是这样,小学,初中,高中轮着见。时光缓缓流逝,我们在其中徜徉徘徊。想想我这个理工屌丝居然码出这些字,也是醉了。
今天梳理一下模板模式。这个模式挺简单的,生活中也是非常的常见。一如既往给出权威解释:又叫模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情冴下,重新定义算法中的某些步骤。
这个经过理解应该不是很难,但是Leo还是给大家YY一个例子。我有一个很疼爱的我的姥姥。她老人家喜欢喝茶,而作为新一代的少年,我不仅喝茶,偶尔也会喝咖啡。这就牵扯到一个问题。如何去制作这两种饮品呢?
在程序设计中,有的过程或者步骤有很强的相似性或者说步骤都有一定的套路组成。按照上面的例子,要喝茶需要,烧水,放茶,泡茶,喝茶这几个步骤。而喝咖啡呢,对于屌丝速溶咖啡雀巢而说,我们发现需要,烧水,放咖啡粉,冲咖啡,喝咖啡这几步完成。简直一样有木有?为什么不能放在一起写呢?于是,我们如果在设计这一类程序的时候,我们不妨给他们先做一个模板,然后让他们分别继承,求同存异这样不就能够完美的解决问题了么!
当然,说到这里还不能表示出周全的模板模式。试想一下,如果哪一天我突然想喝高乐高了,这样步骤变成了如下:准备牛奶,烧牛奶,放高乐高,冲高乐高,喝高乐高。这几步,可见突如其来的一步让之前的模板捉襟见肘。So,一种演进的模板方式站了出来,他自己为这种不确定因素留了一手,这一手叫做hook。他自己搞了一个钩子,作为一个模板不去实现的方法。如果子类需要干一些模板之外的事情,那么hook专门留给它,让他去搞就好了~
模板模式的类图和Python实现如下:
class drink: def step1(self): print ' hot water' def step2(self): print ' mix ' def step3(self): print 'drink carefully' def hook(self): passclass tea(drink): def __init__(self): print 'let us drink tea'class coffee(drink): def __init__(self): print 'let us drink coffee' def hook(self): print'put sugar'if __name__=='__main__': mycoffee=coffee() mycoffee.step1() mycoffee.step2() mycoffee.step3() mycoffee.hook() mytea=tea() mytea.step1() mytea.step2() mytea.step3()
非常简单哟~
- 设计模式—模板模式
- 设计模式—模板模式
- 设计模式——模板设计模式
- 设计模式—模板设计模式
- 设计模式-模板模式
- 设计模式----模板模式
- 设计模式:模板模式
- 设计模式:模板模式
- 设计模式--模板模式
- 设计模式-模板模式
- 设计模式-模板模式
- 《设计模式》- 模板模式
- 设计模式-模板模式
- 设计模式-模板模式
- 设计模式-模板模式
- 设计模式-模板模式
- 设计模式-----模板模式
- 设计模式-模板模式
- Tornado的三大核心模块与处理流程
- Objective - C基础: 第一天 - 4.面向过程和面向对象思想
- js ,jq获取节点
- hashCode与equals的区别与联系
- C++ 事件回调机制的几种实现方式
- 设计模式—模板模式
- 构造函数语意学 笔记(四)
- angularjs(二):前端开发框架三剑客—AngularJS VS. Backone.js VS.Ember.js
- aspx 常见错误 CS0016: 未能写入输出文件“c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/...
- 简单的Dos命令整理(自用,后续用到继续增加)
- unity学习之添加图片作为背景
- Tornado编程实践建议
- Codeforces 501C - Misha and Forest (机智)
- 利用mstscax.dll开发远程登录客户端