分享一波:程序员赚外快-必看的巅峰干货

概念

定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的重复代码全部在父类里面,不同业务的,使用抽象方法,抽取给子类进行实现。抽取过程—抽象方法。

核心:处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用工厂方法模式,将这个节点的代码实现转移给子类完成。即:处理步骤在父类中定义好,具体的实现延迟到子类中定义。
案例流程

去银行办业务,银行给我们提供了一个模板就是:先取号,排对,办理业务(核心部分我们子类完成),给客服人员评分,完毕。这里办理业务是属于子类来完成的,不同的银行业务不同,即使同一个银行也会有不同的业务,因此办理业务的逻辑是抽象方法,其他的取号,排队,评分则是一个模板(有实际逻辑的方法)。
去餐厅点餐,点餐的逻辑模板为:点菜,做菜,吃饭,付款。点菜和付款的逻辑是一个模板,而不同的菜、不同的饭店做菜逻辑是不一样的,因此做菜是一个抽象方法,供子类去实现定义。

代码案例

以发送短信为案例。在发送短信前后,需要进行日志记录。发送前记录接收方号码、发送时间、内容,发送后需要记录发送结果,这两个步骤是固定的,而三大运营商发送短信的逻辑则可能有所不同,因此该方法作为抽象方法给运营商去实现,代码如下:

public abstract class MsgTemplate {

public void sendMsg() {//1.开始日志报文addHeadLog();//2.调用具体不通运营商发送短信httpRequest();//3.结束日志报文addFootLog();
}/*** 模板方法,子类去实现*/
abstract void httpRequest();private void addFootLog() {System.out.println("调用运营商结束记录日志...");
}private void addHeadLog() {System.out.println("调用运营商开始记录日志...");
}

}
// -----
中间编写实现类,移动、联通、电信三大运营商,继承模板类重写模板方法。
下面为调用示例,具体代码不再编写。
// ----
MsgTemplate yidong = new YiDong();
yidong.sendMsg();

与代理模式的异同

模板方法设计模式与代理设计模式都在方法前或后执行了一些代码逻辑,但是二者的核心思想差别很大

相同之处:模板方法设计模式与代理设计模式的相同之处在于,都在特定的方法前或后分别执行了不同的逻辑。
不同之处:代理设计模式的思想是帮助被代理类去执行某个方法,而这个方法与代理类是无关的。同时,代理设计模式知道所代理的是哪些类。模板方法设计模式的思想是提供一套模板,其中一些步骤的代码已经得到了具体的实现,而有部分代码则交由子类去进行实现。模板方法模式提供了一套模板,是提供者,子类则去实现相应的抽象方法,而模板的提供者并不知道这套模板将来会被什么类去使用。

分享一波:程序员赚外快-必看的巅峰干货

详解模板方法设计模式相关推荐

  1. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  2. 《设计模式详解》设计模式概述、UML

    <设计模式详解> 1.设计模式概述 1.1 软件设计模式的产生背景 1.2 软件设计模式的概念 1.3 学习设计模式的必要性 1.4 设计模式分类 2.UML 2.1 类图概述 2.2 类 ...

  3. java 工厂模式详解_Java设计模式之工厂模式详解

    简单工厂其实并不是设计模式,只是一种编程习惯. 首先我们创建父类Cup,所有杯子类的父类.再创建它的子类BigCup和SmallCup类. public abstract class Cup { pu ...

  4. Java里氏转换_详解Java设计模式编程中的里氏替换原则

    定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 ...

  5. 从零开始入门 K8s| 详解 Pod 及容器设计模式

    作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 一.为什么需要 Pod 容器的基本概念 我们知道 Pod 是 Kubernetes 项目里面一个非常重要的概念,也是非常重要的一个原子调度单 ...

  6. Java设计模式之组合模式详解

    文章目录 详解Java设计模式之组合模式 案例引入 组合模式 定义 模式类图结构 相关角色 典型代码 案例分析 类图设计 实例代码 结果分析 JavaJDK中的组合模式 透明组合模式 安全组合模式 组 ...

  7. 嵌入式C设计模式---模板方法设计模式

     更新记录链接:嵌入式C设计模式---前言_嵌入式学习_force的博客-CSDN博客_嵌入式前言 目录         1.模板方法设计模式动漫详解         2.智慧温室大棚监控系统项目详解 ...

  8. android rotate 动画,Android RotateAnimation详解

    RotateAnimation旋转坐标系为以旋转点为坐标系(0,0)点.x轴为0度,顺时针方向旋转一定的角度. 1.RotateAnimation(fromDegrees, toDegrees) [默 ...

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

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

最新文章

  1. 镁的提取及应用_电熔镁炉、电熔镁以及菱镁耐火材料的发展及简介
  2. LVM原理及实现过程
  3. Cisco PT模拟实验(12) 路由器静态路由的配置
  4. 【Git】Git 修改刚提交的 commit message
  5. Topk 问题详解及代码和数据分析
  6. javascript --- 将DOM结构转换成虚拟DOM 虚拟DOM转换成真实的DOM结构
  7. linux下如何查看主机是否安装了ftp server
  8. 计算机科学与导论期末论文,计算机科学与导论论文3
  9. C#常用类库----CSV文件操作类
  10. mongodb集群分片环境搭建
  11. python中bar是什么_python-如何添加一个单独的colobar,它将显示来...
  12. idea安装2019
  13. 理解position:relative 与 position:absolute
  14. 【POJ3525】Most Distant Point from the Sea(半平面交+二分+直线平移)
  15. 阿尔派X09电脑调音软件 DSP调音软件下载
  16. PS中套索工具的使用
  17. 最难忘的一节计算机课,写最难忘的一节课作文8篇
  18. mediawiki mysql配置_安装MediaWiki
  19. ORA-12505, TNS:listener does not currently know of SID given in connect descript 错误 更改方法
  20. 【眼见为实】自己动手实践理解数据库REPEATABLE READ Next-Key Lock

热门文章

  1. 3d打印主要的切片参数类型_3D打印机切片参数详情说明
  2. java int 128 ==_为什么 Java Integer 中“128==128”为false,而”100==100“为true?
  3. php 国密 签名,关于php国密SM3签名算法
  4. Xctf练习sql注入--supersqli
  5. redis哨兵模式没有切换主机_Redis哨兵(Sentinel)模式
  6. html自动给图片加上水印 代码_如何给一千张图片去水印?还好我会python,100行代码轻松搞定...
  7. sentinel 端口_Sentinel原理:控制台是如何获取到实时数据的
  8. 希望得到学术会议的及时回复该怎么说_张烨:在“选矿”博士的世界里,脚踏实地从来都不是说说而已!| 中南达人NO.188...
  9. 大整数算术求值 c语言 栈,用C语言实现 多位整数的四则运算,用栈,例如56*(12+20)-102/2...
  10. Java并发篇_线程详解