定义:

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.
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板方法模式本质:抽象封装流程,具体进行实现

概述:

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

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

模式中的角色

抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。

具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。

优点

模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。

子类实现算法的某些细节,有助于算法的扩展。

通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

缺点

每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

使用场景

  • 多个子类有公有的方法,并且逻辑基本相同时;
  • 重要,复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现;
  • 重构时,模板方法模式 是一个经常使用的模式,把相同的代码抽取到父类,然后通过钩子函数约束其行为;
  • 控制子类扩展,子类必须遵守算法规则。

具体实现:

模板方法模式(Template Method)

解释一下模板方法模式,就是指:一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用,先看个关系图:

就是在AbstractCalculator类中定义一个主方法calculate,calculate()调用spilt()等,Plus和Minus分别继承AbstractCalculator类,通过对AbstractCalculator的调用实现对子类的调用,看下面的例子:

抽象类:

实现类:

测试类:

输出:16

我跟踪下这个小程序的执行过程:首先将exp和"+"做参数,调用AbstractCalculator类里的calculate(String,String)方法,在calculate(String,String)里调用同类的split(),之后再调用calculate(int ,int)方法,从这个方法进入到子类中,执行完return num1 + num2后,将值返回到AbstractCalculator类,赋给result,打印出来。正好验证了我们开头的思路。

java23种设计模式个人整理_java23种设计模式-行为型模式之模板方法模式相关推荐

  1. 设计模式C++实现(5)——原型模式、模板方法模式

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累.最 ...

  2. 设计模式C++实现(4)——原型模式、模板方法模式

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累.最 ...

  3. 设计模式-原型模式与模板方法模式的对比总结

    前言: 前面几个设计模式几乎都是以代码的形式进行汇总,和解析具体的流程.这节原型模式和模板方法模式大致上我觉得是有很多相似的地方,所以就来总结下,那些地方相同.那些地方不同! 对比: 相同点: 1,都 ...

  4. Java设计模式——行为型模式:模板方法模式

    例如,去银行办理业务一般要经过以下4个流程:取号.排队.办理具体业务.对银行工作人员进行评分等,其中取号.排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人 ...

  5. Java设计模式之十一 ---- 策略模式和模板方法模式

    前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...

  6. Java进阶篇设计模式之十一 ---- 策略模式和模板方法模式

    前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...

  7. 白话设计模式--行为型模式--Template Method模式(模板方法模式)

    结构型模式就这么结束了,行为型模式就这么开始了. 首先就是最简单最容易最常用的Template Method模式. 我们怎么定义 Template Method模式呢?简单来说,就是先定义一个骨架(框 ...

  8. 设计模式-策略模式,模板方法模式练习

    看了刘伟老师的设计模式里面的策略模式,做一下后面的练习题.算法的封装与切换--策略模式(四)_刘伟技术博客-CSDN博客史上最全设计模式导学目录(完整版)_刘伟技术博客-CSDN博客 练习 Sunny ...

  9. java23种设计模式+单例_Java23种设计模式之单例模式

    一.单例模式简介 单例模式是Java设计模式中常见的一种模式.主要分为懒汉式单例.饿汉式单例.登记式单例: 单例模式的特点:  1.单例类只能有一个实例:  2.单例类必须自己创建自己的唯一的实例: ...

最新文章

  1. LBE平行空间的技术实现
  2. 【Python基础】5个Pandas技巧
  3. 用一个实际例子理解Docker volume工作原理 1
  4. jquery-data的三种用法
  5. Go程序开发---Go环境配置:CentOS6.5+Go1.8标准包安装
  6. 【牛客 - 181D】小叶的巡查(树的直径,数学)
  7. 【SIGIR 2021 最佳学生论文】图像文本检索的动态模态交互建模
  8. android平台java编程规范_Android Java类编写规范+优化建议
  9. 在html中定位属性怎么用,CSS元素定位的使用方法
  10. python基础篇——列表与列表算法(下)
  11. 三菱PLC QCPU用户手册(功能解说/程序基础篇)
  12. C++开发必备的书——《C++代码整洁之道》C++17可持续软件开发模式实践
  13. 用react-custom-scrollbars插件美化 滚动条
  14. StarRocks 在中移物联网 PGW 实时会话业务领域的应用
  15. 李理:详解卷积神经网络
  16. 2026 年全球开源数目将超 3 亿!中国开源爆发进行时,关于中国开源生态的答案都在这里了
  17. Linux下socket编程之UDP简单实现
  18. 能ping通,但是telnet端口连接失败
  19. supermap使用idesktop发布二三维管线地图
  20. 【英文文本分类实战】之一——实战项目总览

热门文章

  1. 基于 Kubernetes 的 CICD 基础设施即代码
  2. ASP.NET Core Web Api之JWT刷新Token(三)
  3. C#中的Explicit和Implicit了解一下吧
  4. Python、Java、TypeScript 和 Perl 作者谈语言设计
  5. 现身说法:实际业务出发分析百亿数据量下的多表查询优化
  6. 【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis
  7. C# 8中的Async Streams
  8. Go vs .NET Core 2.1
  9. .net的retrofit--WebApiClient库深入篇
  10. 一张图理清ASP.NET Core启动流程