模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类中可以不改变的一个算法的结构即可重定义该算法的某些特定步骤。

首先来看下模板方法模式的结构图:

AbstractClass是抽象类,其实也就是一抽象模板,定义并实现了一个模板方法。即templeteMethod。这模板方法一般是一个具体方法(在抽象类中实现了的基本方法叫做具体方法;在抽象类中没有实现,在子类中实现了叫做抽象方法),它给出了一个顶级逻辑的骨架,而逻辑的组成步骤(doAnything、doSomething)在相应的抽象操作中,推迟到子类实现。顶级逻辑也可以调用一些具体方法。子类不重写templeteMethod方法。

来看一下AbstractClass类:

具体模板类:

客户端就比较简单了:

可以看出,每一个ConcreteClass都可以给出这些抽象方法的不同实现,从而使得顶级逻辑的实现(templeteMethod)各有不同。

模板方法适用于,当不可变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬迁到单一的地方(templeteMethod),这洋酒帮助子类摆脱重复的不变的行为的纠缠。

转载于:https://www.cnblogs.com/winkey4986/archive/2012/04/06/2434083.html

模板方法模式小记【原创】相关推荐

  1. 将模板方法模式应用到kmeans聚类算法

    [0]README 0.1)本文描述和源代码均为原创,旨在说明 如何将模板方法模式应用到kmean聚类算法: 0.2)模板方法模式的intro, 参见  模板方法模式 0.3)for kmeans a ...

  2. 学妹惊呼:使用Java8改造后的模板方法模式真的是yyds

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 371 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 我们在日常开发中,经 ...

  3. Java设计模式系列之——模板方法模式

    大事件 关注篮球或者喜欢逛社交网站的朋友们可能都知道,2019年10月5日,NBA休斯顿火箭队总经理莫雷在推特上发布了一张无知的涉港图片,引发全体中国人民的强烈抗议和不满,一时间舆论哗然,此后,NBA ...

  4. Mybatis源码阅读之二——模板方法模式与Executor

    [系列目录] Mybatis源码阅读之一--工厂模式与SqlSessionFactory 文章目录 一. 模板方法模式 二. 同步回调与匿名函数 三. Executor BaseExecutor与其子 ...

  5. Spring中的设计模式:模板方法模式

    目录 导读 什么是模板模式 优点 缺点 简单演示 Spring中的模板模式 模板抽象类 模板方法 抽象方法 具体子类 总结 导读 文章首发于微信公众号设计模式:模板模式,原创不易,谢谢支持!!! 模板 ...

  6. 设计模式之模板方法模式(Template Method)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  7. android 模板方法模式,安卓设计模式(七)模板方法模式

    模板方法模式用于固定相关操作的执行流程,将具体实现延迟到子类中 该系列其他文章: 定义: 定义一个操作中算法的框架,而降一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定 ...

  8. JAVA 设计模式 模板方法模式

    定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...

  9. 模板方法模式与策略模式的区别

    2019独角兽企业重金招聘Python工程师标准>>> 模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义 ...

最新文章

  1. 四川大学计算机学院2020推免公示,四川大学2020年推免生录取情况分析
  2. 如何通过jq和php实现返回父级页面(附带记忆功能)
  3. opennms mysql_MySQL用户工具
  4. 蒙特卡罗方法验证凯利公式
  5. php curl安装检查,如何判断php的curl是否已安装
  6. 常见软件架构方式的区别
  7. javascript关键字_让我们揭开JavaScript的“ new”关键字的神秘面纱
  8. java虚拟机1.7_《Java虚拟机原理》7.1 精选 —— 总览
  9. 【原创】基于NIOS II的ADS1256 SPI驱动
  10. PCA(主成分分析)的简单理解
  11. 堆积如山的Java面试简历,如何脱颖而出?写简历前你先要做这些
  12. 线性定常系统的离散化
  13. 完整数学小论文(中文版)LaTeX模板
  14. win10找不到网络里的计算机,Win10专业版找不到网络中的其他电脑
  15. 1 0.99999的悖论_天文学科普:带你了解反物质、费米悖论和黑洞
  16. 快速检索2021年EI会议论文的方法
  17. 齐岳|马铃薯凝集素修饰PLGA纳米粒|利福平PLGA纳米粒|齐墩果酸/乳酸羟基乙酸共聚物-水溶性维生素E衍生物(PLGA-TPGS)纳米粒
  18. mysql篇-mysql的locate函数
  19. 【前端开发 | 实例】网页中实现 js 繁体简体切换
  20. 火山引擎联合中国信通院发布《边缘云总体技术与测试要求》

热门文章

  1. python微信好友分析源代码_搞事情了 | 教你用Python分析微信好友信息(内附完整代码)...
  2. lottie 导出html,Lottie Web动效基本原理
  3. java session 作用范围_ssm项目session使用及其作用域问题
  4. 家用电器用户行为分析与事件识别_用户行为分析埋点实时数仓实践
  5. AttributeError: module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘解决方法
  6. python入门学习基础数据结构与语法
  7. 链表list(链式存储结构实现)_VOL.2 如何在python中实现链式存储结构
  8. Django搭建个人博客:渲染Markdown文章目录
  9. SFB 项目经验-51-某上市企业2千人Exchange 2013升级2016高可用之伤01
  10. RouterOS和艾泰路由建立ipsec ×××连接