设计模式—模板模式

来源:互联网 发布: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()


 

  非常简单哟~

0 0