设计模式—模板模式

  今天又约见高中同学去了。果然一放假就是这样,小学,初中,高中轮着见。时光缓缓流逝,我们在其中徜徉徘徊。想想我这个理工屌丝居然码出这些字,也是醉了。

 

  今天梳理一下模板模式。这个模式挺简单的,生活中也是非常的常见。一如既往给出权威解释:又叫模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情冴下,重新定义算法中的某些步骤。

 

  这个经过理解应该不是很难,但是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()


 

  非常简单哟~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值