专栏首页凯哥Java设计模式之模板模式总结篇
原创

设计模式之模板模式总结篇

模板模式总结篇

在上一篇《设计模式之模板模式引导篇》中,我们使用了泡咖啡和泡茶的日常小场景讲解了模板模式的原理。本篇,我们就结合这个小案例,来对模板模式进行总结。

本文出自《凯哥学设计模式》系列教程,凯哥Java(kaigejava)出品。

一:模板模式定义(或内容)

在上一篇中,我们知道泡茶和泡咖啡都需要五个步骤。这五个步骤,其实就是算法骨架。

在具体是泡咖啡还是泡茶,是加牛奶还是加柠檬的时候,把这两个具体步骤延迟到具体真的子类中来实现了。这样就可以在不修改泡茶或泡咖啡的算法结构下,实现特定步骤。

总结模板模式定义:

先定义一个操作中的算法骨架,而将算法的某一个或者某些步骤的具体实现延迟到了子类中来实现,使得子类可以在不修改当前算法的结构情况下,重新定义当前算法的某些特定步骤。

模板模式属于行为模式的一种

二:角色

抽象的基类

实现某些具体步骤的子类

关键代码:公共的代码在基类中实现(如:烧水、倒入杯中、送个客人这三个步骤就在基类hotdrink中实现的)

其他步骤在具体子类中实现(如:是泡茶还是泡咖啡粉就是在具体的子类中实现的)

三:使用场景

在软件设计中,有些功能很类似,只是在某些环节不同而已。大多数环节都是相同的时候,可以使用模板模式。

将通用的算法或者步骤抽取到抽象类中,在具体子类中实现具体特定的操作

四:优缺点

优点:

封装不变的部分,将不变的部分抽取出来;

扩展可变部分,将可变的设置抽象方法,让具体子类来实现。

抽取的公共代码,便于后期维护

行为有基类来控制,具体操作有子类实现。

缺点:

每一个不同的实现都需要有一个子类来实现,这样就会导致类的数量大大的增加,使得系统更加庞大。

需要注意的地方:

为了防止算法骨架被恶意的破坏或者恶意的操作,一般在使用模板模式的时候,模板方法都会加上final这个关键字来限制。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LNMP一键安装包

    LNMP一键安装包 V1.5 已经在Vultr、遨游主机、搬瓦工、LocVPS、Linode、vps2ez、DiaHosting、OneAsiaHost、Dig...

    凯哥Java
  • spring boot原理分析启动依赖中parent帮我们干了什么

    通过前面几篇文章的学习,我们感受到了spring boot的魅力。最明显的感觉就是pom.xml文件。代码少了很多。其实这主要归功于依赖的parent。下面我们...

    凯哥Java
  • RabbitMQ学习系列教程五四:Topic Exchange的使用

    Topic Exchange:所有发送到Topic Exchange的消息被转发到所有关系rotekey中指定的topic的queue上。

    凯哥Java
  • 微信服务号模板消息接口新增"设置行业"和"添加模板"及细节优化

      微信服务号模板消息可以向用户发送重要的服务通知,如信用卡刷卡通知,商品购买成功通知等。昨日,微信团队发布公告称模板消息新增“设置行业”和“添加模板”接口及细...

    ytkah
  • 媒体范尊享版-emlog模板

    Youngxj
  • 如何为Joomla标签创建布局覆盖

    这将在/templates/your-template/html/layouts/joomla/content/文件夹中生成一组文件。

    用户3850506
  • APP传参安装技术怎样帮助APP推广

    APP 如何自动实现携带参数安装?这是许多开发者感兴趣的问题,毕竟在 APP 开发的许多逻辑上常常不可避免的需要判断安装来源,比如:广告投放、用户邀请、用户行为...

    走在河边的小鹿
  • 推荐一个代码生成器 原

        想偷懒,那这个神器首先不能太复杂,鼠标点点,代码就出来了,其次功能要丰富,或者使用灵活,能生成任何语言的代码。

    尚浩宇
  • 深度学习算法简要综述(上)

    自从 2012 年在一个图像识别比赛上,一个神经网络的性能超过人类后,深度学习就火了起来,但当时只有少数人会预料到接下来会发生什么。

    材ccc
  • apache开启重写模式

    现在的好多的框架都使用有路由机制,但是如果在apache下,没有开启重写模式,服务器不会读取路由

    lin_zone

扫码关注云+社区

领取腾讯云代金券