文章首发:

行为型模式:模板方法

十一大行为型模式之一:模板方法。

简介

姓名 :模板方法

英文名 :Template Method Pattern

价值观 :在我的掌控下,任由你发挥

个人介绍

Define the skeleton of an algorithm in an operation,deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
(来自《设计模式之禅》)

解释一下上面的介绍,意思是由父类来定义框架,让子类来具体实现。

你要的故事

刚过完春节,大家都买新鞋了么?今天要讲的故事和鞋子有关。一双鞋子从表面来看,由鞋底、鞋垫、鞋面、鞋带组成,同一系列的鞋子这几个部分都是一样的,用同样的材料做出来,不同系列的鞋子就大相径庭了。根据模板方法模式,组装一双鞋子的制造过程可以归并为固定的框架,至于用什么材料,那由每个系列的鞋子去具体实现。我们先看定义组装鞋子的框架代码。

/*** 定义鞋子制造的工序框架*/
abstract class ShoeInstallTemplate {public abstract void installSole();public abstract void installInsole();public abstract void installVamp();public abstract void installShoelace();public void installShot(){System.out.println("组装一双鞋,步骤如下:");// 组装鞋底installSole();// 组装鞋垫installInsole();// 组装鞋面installVamp();// 组装鞋带installShoelace();}}

定义了一个组装鞋子框架的抽象类 ShoeInstallTemplate,里面有 4 个工序未具体实现,由鞋子制造商去实现,因为只有鞋子制造商才知道鞋子要用什么材料来做。
下面举 2 个比较出名的鞋子:Adidas 的 Boost 系列和 Nike 的 Jordan 系列。下面分别实现这 2 个系列鞋子的制造代码。

/*** Adidas Boost 鞋制造*/
class AdidasBoostShoeInstall extends ShoeInstallTemplate {@Overridepublic void installSole() {System.out.println("组装白色 Boost 鞋底");}@Overridepublic void installInsole() {System.out.println("组装黑色 Boost 鞋垫");}@Overridepublic void installVamp() {System.out.println("组装黑色 Boost 鞋面");}@Overridepublic void installShoelace() {System.out.println("组装黑色 Boost 鞋带");}
}/*** Nike Jordan 鞋制造*/
class NikeJordanShoeInstall extends ShoeInstallTemplate {@Overridepublic void installSole() {System.out.println("组装黑色 Jordan 鞋底");}@Overridepublic void installInsole() {System.out.println("组装黑色 Jordan 鞋垫");}@Overridepublic void installVamp() {System.out.println("组装红色 Jordan 鞋面");}@Overridepublic void installShoelace() {System.out.println("组装红色 Jordan 鞋带");}
}

实现了制造商制造鞋子的代码之后,我们通过代码测试怎么制造 Boost 和 Jordan 鞋子。

public class TemplateMethodTest {public static void main(String[] args) {ShoeInstallTemplate adidasBoost = new AdidasBoostShoeInstall();adidasBoost.installShot();ShoeInstallTemplate nikeJordan = new NikeJordanShoeInstall();nikeJordan.installShot();}}打印结果:
组装一双鞋,步骤如下:
组装白色 Boost 鞋底
组装黑色 Boost 鞋垫
组装黑色 Boost 鞋面
组装黑色 Boost 鞋带组装一双鞋,步骤如下:
组装黑色 Jordan 鞋底
组装黑色 Jordan 鞋垫
组装红色 Jordan 鞋面
组装红色 Jordan 鞋带

模板方法模式就这么简单。是不是掌握了?

代码:
Template Method Pattern

总结

模板方法是一个比较实用的模式,为什么说实用呢?举个现实的例子,Java 能有如今的发展,离不开各大开源框架,比如 Dubbo,有看过源码的朋友就知道,里面大量代码运用了模板方法设计模式,为什么 Dubbo 可以支持很多种注册中心?其实本质就是用了模板方法设计模式,使得可以扩展多种注册中心。掌握好模板方法,对读源码有非常大的帮助,很多人包括我在内,在刚开始阅读源码的时候,有相当长的一段时间怀疑人生,怎么这些代码那么绕?调来调去的。当你了解了常用的设计模式之后,看源代码就可以直截了当的知道是用什么设计模式,为什么用这个设计模式?原来是为了什么什么。。。有了这层思考,就像有一条线将以前散落在各地的知识点连接起来,成了可以推敲的知识

推荐阅读
单一职责原则(方法:修改名字还是密码?接口:洗碗、买菜还是倒垃圾?类:注册、登录和注销)
里氏替换原则(我儿来自新东方烹饪)
依赖倒置原则(抠门的饭店老板)
接口隔离原则(小伙子的作坊)
迪米特法则(手机上看电子书)
开闭原则(社保这点事)
创建型模式:单例模式(小明就只有 1 辆车)
创建型模式:工厂方法(小明家的车库)
创建型模式:抽象工厂(宝马车就得用宝马轮胎和宝马方向盘)
创建型模式:建造者模式(汤这么煲)
创建型模式:原型模式(复印书籍)

公众号后台回复『大礼包』获取 Java、Python、IOS 等教程
加个人微信备注『教程』获取架构师、机器学习等教程

转载于:https://blog.51cto.com/7665794/2383636

行为型模式:模板方法相关推荐

  1. 设计模式-创建型模式-模板方法

    设计模式-创建型模式-模板方法 定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义一个算法的步骤. protected 对于本包及其子类可见. 类图 代码 代 ...

  2. 《设计模式详解》行为型模式 - 模板方法模式

    模板方法模式 6.1 模板方法模式 6.1.1 概述 6.1.2 结构 6.1.3 案例实现 6.1.3 优缺点 6.1.4 适用场景 6.1.5 JDK源码 - InputStream 完整的笔记目 ...

  3. 设计模式 — 行为型模式 — 模板方法模式

    目录 文章目录 目录 模板方法模式 应用场景 代码示例 模板方法模式 模板方法模式,定义一个算法或者流程,部分环节设计为外部可变,用类似于模板的思想来实例化一个实体,可以往模板中填充不同的内容: 在模 ...

  4. 行为型模式-模板方法模式

    1.概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关. ...

  5. 4.16_template_method_行为型模式:模板方法模式

    行为型模式 --- 模板方法模式 --- 内容:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中使子类可以不改变一个算法的结构,即可重定义该算法的某些特定步骤角色:1. 抽象类 (Abstract ...

  6. 设计模式03 行为型模式

    行为型模式 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎么相互协同共同完成单个对象都无法单独完成的任务,它设计算法于对象间职责的分配. 行为型模式分为类行为模式和对象行为模式 ...

  7. 设计模式——行为型模式之责任链模式(简简单单入门责任链,理解I/O流消息怎么逐步传递处理以及服务器框架转发)

    文章目录 前言 一.责任链模式定义 二.责任链模式结构 三.责任链高级应用 四.责任链模式优缺点 设计模式系列文章 结尾 前言 作者更有一系列设计模式文章(还在持续更新),图例丰富,少量代码,适合入门 ...

  8. 设计模式其实很简单之行为型模式

    关注公众号获取更多资料 设计模式- 行为型模式 ​ 行为型模式描述的死程序运行时复杂的流程控制,描述了多个类或者对象之间怎样相互协调合作,涉及算法与对象之间的职责分配. ​ 行为型模式是23中设计模式 ...

  9. 设计模式— 行为型模式

    关注公众号获取更多资料 设计模式- 行为型模式 ​ 行为型模式描述的死程序运行时复杂的流程控制,描述了多个类或者对象之间怎样相互协调合作,涉及算法与对象之间的职责分配. ​ 行为型模式是23中设计模式 ...

最新文章

  1. 吴甘沙:天外飞“厕”、红绿灯消失,未来无人驾驶将被重新定义
  2. Linux ps命令详解与示例说明
  3. 2021Lazada开店入驻最新流程Lazada新店运营思路分享
  4. Activity生命周期 onCreate onResume onStop onPause
  5. MeayunDB学习笔记(一) MeayunDB介绍及安装
  6. nginx开发遇到的问题
  7. G1垃圾收集器全视角解析
  8. SQL中GROUP BY的理解
  9. 【实践】飞猪交通个性化搜索推荐技术的实践与创新(附PPT下载链接)
  10. 银联接口(注意项备忘)
  11. OpenStack 的诞生
  12. 什么是Hadoop,怎样学习Hadoop
  13. Linux c++ udp按包发送接收文件
  14. java awt point_100分 解决java import java.awt.Point;import java.awt.Rectangle;
  15. QQ音乐API分析之-加密参数分析(sign计算)
  16. win10 双屏 窗口显示快捷键
  17. vue项目PC端移动端适配方案
  18. AutoCAD 2021 安装 详细教程
  19. 淘宝权重及其大数据分析
  20. 揭秘IBM架构设计方法论 —— Solution Design I

热门文章

  1. Gitblit用户没有push权限,但是已经在team里面配置了
  2. Linux soft lockup分析
  3. Ubuntu17.04安装WineQQ7.8及微信
  4. 1-5-20:球弹跳高度的计算
  5. 信息化的“五观”与“N为”
  6. webdriver(python)学习笔记一
  7. 关于多边形内点数问题的一些变形
  8. 自学大数据:用以生产环境的Hadoop版本比较
  9. 在JSP客户端限制表单重复提交
  10. 计算机基础课程教学创新,计算机基础课程教学学生创新能力的培养-计算机基础论文-计算机论文(12页)-原创力文档...