模版方法模式/Template Method

意图/适用场景:

模版方法模式其实是一种应用很广泛的模式,特别是在使用抽象类的时候。

模版方法模式中必然有一个核心的抽象类,不能是接口。声明一些抽象方法,这些方法由子类来做各不相同的实现;也可以是一些非抽象的方法,这些方法只是做为默认的实现,子类应该覆盖它们。

此外,还要定义一个或多少具体的方法,它们实现一些逻辑,调用前面提到的抽象或非抽象方法。这种方法就本模式中最重要的部分,这样的方法一般规定了调用其它抽象方法的逻辑,所以它是一个模版,这个方法就称为模版方法。

模版方法一般不被子类覆盖,否则就失去了“模版”的作用。

UML:

参与者:

  1. 抽象模版(Abstract Template):

    • 定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作。
    • 定义并实现一个模版方法,这是一个具体的方法,给出了一个逻辑骨架,以固定的顺序和条件来调用其它的抽象方法。它定义了调用逻辑,是一个模版。
  2. 具体模版(Concrete Template):
    • 以自己的方式实现父类所定义的抽象方法。

要点:

模版方法模式中的方法:

  1. 模版方法:

    • 一个模版方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。这个方法在抽象类中定义,并由子类不加修改地完全继承。
  2. 基本方法:

主要由子类来实现或重写,体现继承关系的方法称为基本方法。基本方法又可以分为三种:

  • 抽象方法:必须由子类来实现的方法。
  • 具体方法:具体方法仍然由抽象类实现,而子类并不实现或重写。有些具体方法可以起来工厂方法的作用。
  • 钩子方法:钩子方法也由抽象类来实现,但这只是作为一种默认的实现,一般是空的。子类应该重新实现,如果没有的话,只是说明不需要。

示例代码:

   [java]// Source code from file:  AbstractTemplate.java

package designPatterns.TemplateMethod;

public abstract class AbstractTemplate {// abstract methodprotected abstract void abstractMethod();

// hook method, provide default implementationprotected void hookMethod() {System.out.println("AbstractTemplate.hookMethod()");}

// template methodpublic void templateMethod() {abstractMethod();hookMethod();}}

// Source code from file:  ConcreteClassA.java

package designPatterns.TemplateMethod;

public class ConcreteClassA extends AbstractTemplate {

protected void abstractMethod() {System.out.println("ConcreteClassA.abstractMethod()");}

protected void hookMethod() {System.out.println("ConcreteClassA.hookMethod()");}

}

// Source code from file:  ConcreteClassB.java

package designPatterns.TemplateMethod;

public class ConcreteClassB extends AbstractTemplate {

protected void abstractMethod() {System.out.println("ConcreteClassB.abstractMethod()");}

}

// Source code from file:  User.java

package designPatterns.TemplateMethod;

public class User {public static void main(String[] args) {AbstractTemplate a = new ConcreteClassA();AbstractTemplate b = new ConcreteClassB();a.templateMethod();b.templateMethod();}}[/java] 

转载于:https://blog.51cto.com/2ndmoon/1283689

模版方法模式/Template Method相关推荐

  1. 模版方法模式 Template Method Pattern — 穷人和富人的不同婚恋历程

    说明:我也是初学者,希望大家能提出宝贵意见.另外转载请注明作者左洸和出处博客园,毕竟花费了很长时间才完成. 不管是穷人还是富人,都要谈恋爱结婚,而且每个人的婚恋经历,步骤大体上都是一样的,比如说:见面 ...

  2. .NET设计模式(16):模版方法(Template Method)

    概述 变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对.如何更好的去抓住变化点,应对变化?如何更好的提高代码复用?通过学习Template Method模式,您应该有一个新的认识 ...

  3. C++ 模版方法模式

    简述 模版方法模式(Template Method Pattern)定义一个操作中算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. | 版 ...

  4. 详解设计模式:模版方法模式

    模板方法模式(Template Method Pattern)也被称为模板模式(Template Pattern),是在 GoF 23 种设计模式中定义了的行为型模式. 模板方法模式 定义一个操作中的 ...

  5. JAVA设计模式(14) —行为型模板方法模式(Template Method)

    1 定义: 模板方法模式(Template Method) Define the skeleton of an algorithm in anoperation, deferring some ste ...

  6. 模板方法模式 Template method 行为型 设计模式(二十六)

    模板方法模式 Template method 上图为网上百度的一份简历模板截图 相信大家都有求职的经历,那么必然需要简历,写简历的时候,很可能你会网上检索一份简历模板,使用此模板的格式,然后替换为你的 ...

  7. 设计模式 模版方法模式 展现程序员的一天

    继续设计模式~ 模版方法模式 老套路,先看下定义:定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤. 简单看下定义,模版方法定义了一个算 ...

  8. 设计模式——模版方法模式详解(论沉迷LOL对学生的危害)

    0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦 ...

  9. java 模板方法_设计模式(java实现)_模板方法模式(Template method)

    设计模式(java实现)_模板方法模式(Template method) 模板方法模式是编程中经常用到到的模式.它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现.这样,新的子类可以在不改变一个 ...

最新文章

  1. 今日 Paper | 多人线性模型;身体捕捉;会话问答;自然语言解析;神经语义
  2. ASP.net中的几种分页方法
  3. 64位内核开发第8讲,文件操作.以及删除文件.
  4. 在 C++Builder 工程里调用 DLL 函数
  5. JMockit常用操作
  6. 从数据类型 varchar 转换为 numeric 时出错.
  7. Unix命令行程序和内建指令
  8. 什么是 jsp,什么是Servlet?jsp 和Servlet 有什么区别?
  9. 女士品茶——统计学如何变革了科学和生活1
  10. 如何将origin pro的界面切换变成中文显示?
  11. 基于二阶矩阵的最优化问题(二)(附matlab代码)
  12. android指南针校准 代码_Android:指南针的制作
  13. 调用链监控 - Tracing - APM
  14. 腹板拼接宽度_钢结构拼接相关规范要求
  15. R语言28-Prosper 贷款数据分析4
  16. linux处理fq文件练习
  17. WinCE EBOOT的入口Startup.s
  18. swapidc鸟云模板kyuan源码
  19. 弹性地基梁板法计算原理_一种筏板基础内力分析方法与流程
  20. Java中PO、BO、VO、DTO、POJO、DAO概念及其作用和项目实例图

热门文章

  1. vue2+webpack2实现饿了么移动端商家页面
  2. win7 创建FTP站点
  3. 大数据应用开发八大基本原则
  4. Xbox One 初始化-2 激活(百视通)和配置账户
  5. 闲来无事 linux cp命令的三种实现方式
  6. 一步步学习 Spring Data 系列之JPA(一)
  7. 宽带服务价值链之:ISP,ICP,ASP,IDC,CDN
  8. 数据库事务的隔离级别 (转)
  9. MySQL 查询重复记录
  10. Android在listview添加checkbox实现单选多选操作问题