目录

模板模式:

模板优点:

模板模式应用:

模板模式和策略模式区别:

模板实例:

上述代码 GitHub 地址:https://github.com/baicun/designPatterns


模板模式:

封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现

模板优点:

抽取公共代码模板在超类中实现,方便维护和阅读。

模板模式应用:

Android的BaseAdapter

模板模式和策略模式区别:

模板模式侧重步骤封装;

策略模式侧重功能封装;

模板实例:

类图:

示例:以喝咖啡和喝茶的步骤为例:

喝茶(烧水->冲泡茶叶->把茶水倒入杯子->加糖)

喝咖啡(烧水->冲泡咖啡粉->把咖啡倒入杯子->加牛奶)

很明显,不同的饮品有其类似的步骤,我们将这种步骤抽象成一个算法族,不同的饮品只需要实现自己独有操作,无需关心步骤

代码:

模板超类-HotDrinkTemplate.java

public abstract class HotDrinkTemplate {//模板核心算法public final void prepareRecipe(){//烧水boilWater();//煮brew();//倒杯子pourInCup();//加调料addCondiments();if(wantConditionHook()){addCondiments();}else{System.out.println("no addCondiments");}}public boolean wantConditionHook(){return true;}//final 子类不可实现public final  void boilWater(){System.out.println("boilWater");}//abstract 子类必须实现public abstract void brew();public final void pourInCup(){System.out.println("pourInCup");}public abstract void addCondiments();
}

泡茶的子类- TeaHook.java

public class TeaHook extends HotDrinkTemplate{@Overridepublic void brew() {System.out.println("brew tea");}@Overridepublic void addCondiments() {System.out.println("addCondiments sugar");}@Overridepublic boolean wantConditionHook() {System.out.println("Condiments,yes or no? please input(y/n):");BufferedReader in = new BufferedReader(new InputStreamReader(System.in));String result = null;try {result = in.readLine();} catch (IOException e) {e.printStackTrace();}if(result.equals("n")){return false;}else{return true;}}
}

注·wantConditionHook()方法使模板方法更加灵活,不同子类可以实现不同的操作。

测试类:

public class MainTest {public static  void main(String[] args){//hook测试HotDrinkTemplate teaHook = new TeaHook();teaHook.prepareRecipe();}
}

上述代码 GitHub 地址:https://github.com/baicun/designPatterns

Java设计模式 - 模板模式相关推荐

  1. Java设计模式-模板模式

    Java设计模式-模板模式 什么是模板模式? 模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框架.结构.原型.定义一个我们共同遵守的约定. 定义模板,我们的剩余工作就是对其进行充实. ...

  2. 【设计模式】Java设计模式 - 模板模式

    [设计模式]Java设计模式 - 模板模式

  3. Java设计模式—模板模式(Template)

    模板模式 业务需求 编写豆浆制作程序 选材-添加配料-浸泡-豆浆机打碎 选材.浸泡.打碎这几步对于制作不同豆浆都是一样的 比较简单,这里不再使用传统方法,直接上设计模式 模板模式基本介绍 模板模式,在 ...

  4. java设计模式————模板模式,手撸一个JDBCTemplate

    模板模式(Template Method Pattern) 定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现. 模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤. 属于行为 ...

  5. Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式

    Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式 一.概述 模板设计模式: 父类定义通用抽象的功能方法,子类负责具体的实现. 本文将以一个通 ...

  6. Java设计模式-模板方法模式详解

    Java设计模式-模板方法模式 文章目录 Java设计模式-模板方法模式 0.前言 1.模板方法原理 2.模板方法模式中的角色 3.模板方法模式的UML类图 4.代码实现 5.编码测试 6.模板模式中 ...

  7. Java 设计模式——状态模式

    概述 很多人在说状态模式的时候总拿策略模式来进行对比,可能他们的类图会有一点类似,可我却不认为他们有多么相像.你可以阅读<Java设计模式--策略模式>这篇博客,并与本文对比,以找到蛛丝马 ...

  8. Java设计模式——Builder模式

    前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...

  9. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

最新文章

  1. 请使用frameset/frameset完成以下功能
  2. 挪动以太坊:比特币现金的新功能使其成为智能合约竞争者
  3. 这38个小技巧告诉你如何快速学习MySQL数据库
  4. mysql多实例脚本
  5. 静态方法与单例模式的区别以及为什么要用单例模式而不是静态方法
  6. “【第二届】Erlang Fans交流会”议程
  7. BZOJ 1500 维修数列
  8. 使用xfire webservice接口开发,obj与xml相互转换好用工具类,不需要写大量的转换代码,亲测可用
  9. c# uri.host_C#| 具有示例的Uri.Host属性
  10. hdu-5493 Queue(二分+树状数组)
  11. spring boot 处理自定义注解
  12. 操作系统—内存的动态分区分配算法
  13. python创建字符串数组_python – 如何为多处理初始化字符串数组
  14. 经典场效应管如何快速关断技巧-KIA MOS管
  15. 全国大部分城市的经纬度位置
  16. windows注册表文件损坏了,导致windows无法启动,解决办法!
  17. 牛客 小米校招 找“异数” 高精度进制转化
  18. c++ map查找key
  19. Windows查看电脑ip地址方法(用于连接远程桌面)
  20. [人工智能-深度学习-43]:输入预处理 - 规范化Normalization、标准化Standardization、正态分布、算术平均、方差

热门文章

  1. threejs球体旋转与场景旋转_js 之threejs地球旋转
  2. 【性能概念】理发店模型
  3. .com和.cn的区别
  4. 2019创新中国春季峰会暨企业创新峰会于5月22-23日在上海召开!
  5. 个人博客全新UI:我心中你最美
  6. 高压空气压缩机气体压缩的目的
  7. 热备份和冷备份优缺点
  8. 长江职业学院计算机系分数线,长江职业学院录取分数线2021是多少分(附历年录取分数线)...
  9. 算法面试不懂这6大数据结构知识一定挂!(附力扣LeetCode真题讲解)
  10. LeetCode——552. 学生出勤记录 II(Student Attendance Record II)[困难]——分析及代码(Java)