今天又约见高中同学去了。果然一放假就是这样,小学,初中,高中轮着见。时光缓缓流逝,我们在其中徜徉徘徊。想想我这个理工屌丝居然码出这些字,也是醉了。
今天梳理一下模板模式。这个模式挺简单的,生活中也是非常的常见。一如既往给出权威解释:又叫模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情冴下,重新定义算法中的某些步骤。
这个经过理解应该不是很难,但是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):
pass
class 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()
非常简单哟~