程序设计模式有哪些,怎么去理解软件设计模式
程序设计模式
作者: 沙茶敏碎碎念
2019-12-03 15:58:44
[ 闻蜂导读 ] 今天,我们来讲一种设计模式,叫做模板方法。讲设计模式之前,我们先来讲一个大家非常熟悉的场景,我在广州地铁的自动售货机上,有着集中不同的售货模式,如果买饮料的话,是从售货机的冰柜里面出货,如果买饼干或者纸巾的话,是从后面的普通售货盒出货,如果是充值话费的话,那么不用出货。

今天,我们来讲一种设计模式,叫做模板方法。讲设计模式之前,我们先来讲一个大家非常熟悉的场景,我在广州地铁的自动售货机上,有着集中不同的售货模式,如果买饮料的话,是从售货机的冰柜里面出货,如果买饼干或者纸巾的话,是从后面的普通售货盒出货,如果是充值话费的话,那么不用出货。那么,如果让你来实现这么一个售货机程序,你会怎么做呢?同样的道理,现在有很多无人售货咖啡机,可以点不同的咖啡或者奶茶,如果让你来开发一款程序,你会如何实现呢?

 

大话程序员设计模式之模板方法

 

 

我们以咖啡机为例,虽然咖啡跟绿茶看起来相差很远,但他们的制作过程却也有相似之处,首先都是先调用烧水模块,然后绿茶的话添加绿茶粉,咖啡的话添加咖啡粉,最后是调用加水搅拌模块,然后提供给用户。我们为何不实现一个积累,表示制作饮料的基本过程(烧水->加料->加水搅拌)。之后的奶茶模块跟绿茶模块,都是实现这个基类,然后各自实现自己的加料方法即可。
这便是模板方法,我们将子类中公共的流程与方法抽出来,放到基类当中,子类可以继承基类,重写相关的方法,从而来实现不同的功能。

 

大话程序员设计模式之模板方法


模板方法准循着迪啦米特法则,即每一个类都对其他的类了解最少,子类之间都不知道互相的不同,父类也不知道子类的具体实现,只要按照自身的流程依次调用各个方法。当是,假如我们又有一些新的需求呢?比如说我们想要售卖冰咖啡,很显然,我们很少售卖冰绿茶。那么,怎么实现让我们的程序能够顺利跑起来呢?总不能重写加料的时候,变成加咖啡跟冰块,这样子后面再加入热水搅拌岂不是很浪费,而且可能还会让咖啡溶解不均匀。
在这里,我们用到一种叫做钩子方法的技术,什么叫做钩子方法呢?其实并不难,我们只要在积累加上一个是否为冰饮料,已经最后冰饮料如何处理即可。既原来的算法流程为(烧水->加料->加热水搅拌->(如果冰饮料,那么加冰))。这样子,我们的绿茶继承这个基类,让是否为冰饮料方法返回否,让冰咖啡返回真即可。

 

大话程序员设计模式之模板方法

 

总结

今天我们介绍了模板方法,模板方法定义了一个算法的基本骨架,而把实现放到子类当中,模板方法使得子类在不改变算法结构下,就能重新定义算法的某些步骤,怎么样,你学会了么?欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)

更多关注微信公众号:jiuwenwang

相关文章

  • 验证码: 看不清?点击更换 看不清? 点击更换
  • 意见反馈
    意见反馈
    返回顶部