定义

  • 在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行
  • 模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤
  • 基本思想是:算法只存在于一个地方,也就是在父类中,容易修改。需要修改算
    法时,只要修改父类的模板方法或者已经实现的某些步骤,子类就会继承这些修改
  • 实现了最大化代码复用。父类的模板方法和已实现的某些步骤会被子类继承而直接使用
  • 一般模板方法都加上final关键字, 防止子类重写模板方法
  • 缺点该模式的不足之处:每一个不同的实现都需要一个子类实现,导致类的个数增加使得系统更加庞大

模板方法模式的钩子方法

  1. 在模板方法模式的父类中,我们可以定义一个方法,它默认不做任何事,子类可以
    视情况要不要覆盖它,该方法称为“钩子
  2. 用下面做奶茶的例子来讲解,比如,我们还希望制作纯奶茶,不添加任何的配
    料,请使用钩子方法对前面的模板方法进行改造

代码

  • 咱们以做奶茶为例
package com.example.demo;public class test10 {public static void main(String[] args) {System.out.println("----制作红豆奶茶----");MilkTea milkTea=new RedBeanSoyaMilk();milkTea.make();System.out.println("----制作纯奶茶----");MilkTea milkTea1 = new PureSoyaMilk();milkTea1.make();/* ----制作红豆奶茶----第一步,从牛身上挤奶第二步,从树上摘下来茶叶加入上好的红豆搅拌一下----制作纯奶茶----第一步,从牛身上挤奶第二步,从树上摘下来茶叶搅拌一下*/}
}//抽象类
abstract class MilkTea {//模板方法, make , 模板方法可以做成final , 不让子类去覆盖.final void make() {one();two();if (customerWantCondiments()) {three();}four();}void one() {System.out.println("第一步,从牛身上挤奶");}void two() {System.out.println("第二步,从树上摘下来茶叶");}abstract void three();void four() {System.out.println("搅拌一下");}//钩子方法,决定是否需要添加配料boolean customerWantCondiments() {return true;}
}class RedBeanSoyaMilk extends MilkTea {@Overridevoid three() {System.out.println("加入上好的红豆");}
}class PureSoyaMilk extends MilkTea{@Overridevoid three() {System.out.println("不会走这里,如果打印,证明有问题");}@Overrideboolean customerWantCondiments() {// 这里变成false就不会去走添加配料的方法return false;}
}

java设计模式-16模板模式相关推荐

  1. 二、java设计模式之模板模式深进浅出

    一.背景 模板模式具体怎么使用,下面我会详细讲,如果有那个地方讲的不到位了,请大家多多指教,共同学习,我尽量以白话的形式进行展示,废话不多说了,下面开始. 二.spring中的使用 springJDB ...

  2. Java设计模式之模板模式【通过LOL选英雄案例】

    初衷 设计模式(Design Pattern)引用百度百科中的一句话,就是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.实际上在我们的实际编码中到处都有设计模式的影子,比如最常用的单例 ...

  3. java设计模式之模板模式

    模板模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同 ...

  4. 23种java设计模式之模板模式

    说实话,我们学的框架其实就是模板,是不是这样引出话题就能很快理解模板模式呢,好了,下面我们用一个经典的泡咖啡,泡茶案例来说明模板模式. 泡咖啡步骤:水烧开--->冲泡咖啡粉--->把咖啡倒 ...

  5. Java设计模式之策略模式+工厂模式+模板模式

    Java设计模式之策略模式+工厂模式+模板模式 1.策略模式+工厂模式+模板模式 个人的理解:实际开发工程中,一些业务很复杂的逻辑使用很多的 if 或者 if···else 语句,不利于维护和扩展,为 ...

  6. Java设计模式分为创建模式, 结构模式, 行为模式 3种类型

    Java设计模式之创建模式包括: Factory,    工厂模式 Singleton,   单例模式 Builder,    建造模式 Prototype,    原型模式 Java设计模式之结构模 ...

  7. java设计模式之工厂模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  8. Java设计模式之模板方法模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  9. java设计模式之建造者模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

最新文章

  1. php e all e notic,error_reporting(E_ALL ^ E_NOTICE)详细说明 | 慢生活的记忆
  2. Sparkmllib scala线性回归
  3. CentOS 7 安装.NET Core 2.0
  4. WWW软件全球使用排名
  5. MairDB 修改表(三)
  6. Stanford CS230深度学习(三)调参、正则化和优化算法
  7. 中国碳酸镁铝行业市场供需与战略研究报告
  8. 7.3 环境(Condition)
  9. 阶段3 2.Spring_10.Spring中事务控制_11 spring5新特性的介绍
  10. php对表中的字段自选排序,Mysql应用MySQL 按指定字段自定义列表排序的实现
  11. 怎么手写 xpath
  12. word页眉页脚设置
  13. 联想笔记本快捷键控制千千静听 2009年10月2日19:09:44
  14. 关于n阶线性齐次常微分的特征方程特征根相同时解的推导
  15. 检验下载文件完整性、真实性——SHA256校验值
  16. goland下载与安装教程(详细)
  17. 【转载】清华毕业致辞:从容行走于无人知晓的荒原,欣赏并创造别样的风景...
  18. 禁止Debian 10自动休眠
  19. 【JS】设计并实现“恺撒密码”
  20. 华南理工统考计算机应用基础,华南理工大学计算机应用基础平时作业

热门文章

  1. PHP开发支付宝之电脑网站支付--流程简介
  2. 会计电算化与计算机的论文,浅析会计电算化的论文.doc
  3. 魅族 系统更新服务器,Flyme系统再次更新,魅族16系列基本在内,你尝鲜了吗?...
  4. MMLAB系列:mmdetection的使用
  5. 利用python爬取龙虎榜数据及后续分析
  6. 量子力学揭秘————量子的背景和提出以及理解笔记
  7. jsp中如何使1和0再页面中显示为男和女
  8. 华为服务器修改root密码,修改root密码
  9. 《精益数据分析》-第一部分概括笔记
  10. 计算机网络--基础篇(IP地址,端口号,协议,五元组,封装分用,客户端,服务器)