Java设计模式——模板设计模式

article/2025/10/25 18:43:42

模板设计模式

1.模板模式简介

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

2.模板模式的结构

模式中的角色:

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

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

在这里插入图片描述

3.通用代码如下

抽象模板类:

public abstract class AbstractClass {//基本方法protected abstract void doSomething();//基本方法protected abstract void doAnything();//模板方法public void templateMethod(){/*调用基本方法,完成相关的逻辑this.doAnything();this.doSomething();}
}

具体模板类:

public class ConcreteClass1 extends AbstractClass {//实现基本方法protected void doAnything() {//业务逻辑处理}protected void doSomething() {//业务逻辑处理}
}
public class ConcreteClass2 extends AbstractClass {     //实现基本方法protected void doAnything() {//业务逻辑处理}protected void doSomething() {//业务逻辑处理}
}

场景类:

public class Client {public static void main(String[] args) {AbstractClass class1 = new ConcreteClass1();AbstractClass class2 = new ConcreteClass2();               //调用模板方法class1.templateMethod();class2.templateMethod();}

4.案例讲解

需求

  • 有多个类,完成不同的job

  • 要求能够得到各自的完成时间

1.)传统方式实现

代码

package Abstract;public class AbstractExercise {public static void main(String[] args) {AA aa = new AA();aa.calcTime();BB bb = new BB();bb.calcTime();}
}
class AA {// 计算任务1// 1 + 2 + ...+ 100000public void calcTime() {//得到开始时间long start = System.currentTimeMillis();job(); // 计算执行任务的时间// 得到结束时间long end = System.currentTimeMillis();System.out.println("AA 执行的时间 " + (end - start) + "毫秒");}long sum = 0;public void job(){for (int i = 1; i <= 100000; i++) {sum += i;}}
}class BB {// 计算任务2// 1*1 + 2*2 +... 10000*10000public void calcTime() {//得到开始时间long start = System.currentTimeMillis();job(); // 计算执行任务的时间// 得到结束时间long end = System.currentTimeMillis();System.out.println("BB 执行的时间 " + (end - start) + "毫秒");}long sum = 0;public void job(){for (int i = 1; i <= 10000; i++) {sum += i * i;}}
}
// CC类 DD类.......

对于不同的任务它们有自己各自的执行方式,我们需要做的是统计它们各自执行完任务所花费的时间。我们通过观察发现计算时间的方法被重复的使用,方法是一样的方法只是各个任务执行的细节不同罢了,如果有CC类 、DD类…的不同任务job()——因此我们可以将其设置为抽象方法!,那么计算时间的方法calcTime()要在每一个类中使用!这样代码就大量的重复了,不利于修改与维护!——因此我们可以将其设置为模板方法!

2.)模板设计模式实现

抽象模板类(AbstractClass)

package Abstract;public abstract class Tempalte { //父类——模板类public abstract void job();// 抽象方法// 模板方法public void calcTime() { // 实现方法,调用job()方法//得到开始时间long start = System.currentTimeMillis();job(); // 计算执行任务的时间————动态绑定机制// 得到结束时间long end = System.currentTimeMillis();System.out.println("任务执行的时间 " + (end - start) + "毫秒");}
}

具体模板类(ConcreteClass)

package Abstract;public class AA extends Tempalte{// 计算任务1// 1 + 2 + ...+ 100000long sum = 0;@Overridepublic void job(){for (int i = 1; i <= 100000; i++) {sum += i;}}
}
package Abstract;public class BB extends Tempalte{// 计算任务2// 1*1 + 2*2 +... 10000*10000long sum = 0;@Overridepublic void job(){for (int i = 1; i <= 10000; i++) {sum += i * i;}}
}

测试类(ConcreteClass)

package Abstract;public class Application {public static void main(String[] args) {Tempalte aa = new AA();aa.calcTime(); // 动态绑定机制,对多态的理解Tempalte bb = new BB();bb.calcTime();}
}

5.模式模式优缺点:

1.)优点

模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展。通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

2.)缺点

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

3.)适用场景

在某些类的算法中,用了相同的方法,造成代码的重复。控制子类扩展,子类必须遵守算法规则。

注:如果文章有任何错误或不足,请各位大佬尽情指出,评论留言留下您宝贵的建议!如果这篇文章对你有些许帮助,希望可爱亲切的您点个赞推荐一手,非常感谢啦

在这里插入图片描述


http://chatgpt.dhexx.cn/article/y9vUNHyg.shtml

相关文章

【设计模式】--模板模式

豆浆制作 编写制作豆浆的程序&#xff0c;说明如下: 制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎通过添加不同的配料&#xff0c;可以制作出不同口味的豆浆选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的请使用 模板方法模式 …

Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式

Java 设计模式 --- Template 模式 Java Template 模式 Java 模板设计模式 一、概述 模板设计模式&#xff1a; 父类定义通用抽象的功能方法&#xff0c;子类负责具体的实现。 本文将以一个通用的定时任务&#xff0c;处理模式&#xff0c;来讲解java 模板设计模式。 假设定时任…

设计模式——模板设计模式

一 前言 在面向对象开发过程中&#xff0c;通常会遇到这样的一个问题&#xff0c;我们知道一个算法所需的关键步骤&#xff0c;并确定了这些步骤的执行顺序&#xff0c;但是&#xff0c;某些步骤的具体实现是未知的&#xff0c;或者说某些步骤的实现是会随着环境的变化而改变&…

java设计模式之模板方法设计模式

什么是模板方法设计模式 模板方法是基于继承实现的&#xff0c;在抽象父类中声明一个模板方法&#xff0c;并在模板方法中定义算法的执行步骤(即算法骨架)。在模板方法模式中&#xff0c;可以将子类共性的部分放在父类里实现&#xff0c;而特性部分在子类中实现&#xff0c;只需…

一文搞懂设计模式--模板模式

Hi&#xff0c;大家好。今年的天气实在是太热了&#xff0c;七月份的厦门晒得我觉得身上冒出了烤肉香&#xff0c;不知道各位是否安好&#xff0c;但是在再热的天气也不能阻止我们学习的热情&#xff08;doge&#xff09;。今天的主题是模板&#xff08;Template Method&#x…

设计模式 – 模板设计模式

模板设计模式 模板方法模式&#xff08;Template Method Pattern&#xff09;&#xff0c;又叫模板模式(Template Pattern)&#xff0c;在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。 该模式的主…

【设计模式】模板模式

博主声明&#xff1a; 转载请在开头附加本文链接及作者信息&#xff0c;并标记为转载。本文由博主 威威喵 原创&#xff0c;请多支持与指教。 本文首发于此 博主&#xff1a;威威喵 | 博客主页&#xff1a;https://blog.csdn.net/smile_running 这是23种设计模式中的模板模…

设计模式之模板模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、模板模式是什么&#xff1f; 模板模式是一种行为型的软件设计模式&#xff0c;在父类中定义了一个模板算法&#xff0c;只实现…

设计模式——模板模式

更多内容&#xff0c;前往 IT-BLOG 在面向对象程序设计过程中&#xff0c;程序员常常会遇到如下情况&#xff1a;设计一个系统时知道算法所需的关键步骤&#xff0c;且确定了这些步骤的执行顺序&#xff0c;但某些步骤的具体实现还未知&#xff0c;或者说某些步骤的实现与具体…

深入理解设计模式之模板模式

我们平时办理入职的流程是&#xff1a;填写入职登记表->打印简历->复印学历->复印身份证->签订劳动合同->建立花名册->办理工牌->安排工位。我平时在家里炒菜的流程是&#xff1a;洗锅->点火->热锅->上油->下原料->翻炒->放调料->出…

数据化风控与催收人员策略管理

在印象中催收也许是个玄学&#xff0c;一个做得好的催收员除了催收技巧外、你需要了解心理学、懂声音学、懂人性、懂风水易经&#xff0c;比如就有个认识的人对什么岁数的人在哪个时辰拨打电话才比较好&#xff0c;都有讲究…总之一切尽在不言中… 但催收的管理却与之相反&…

信贷产品年终总结之风控评分模型

叮咚&#xff0c;信贷年终总结的又一个专题来了&#xff0c;作为报告总结类的系列型文章&#xff0c;近期我们番茄知识星球平台陆续发布了相关年终总结专题&#xff0c;依次为客群特征画像、贷中行为分析、贷后逾期表现等&#xff0c;以上文章可详见之前陆续发布的内容。该业务…

实操信贷场景中的反欺诈模型

今天的文章&#xff0c;关于反欺诈模型的实操&#xff0c;之前有跟大家分享过相关内容&#xff0c;部分反欺诈的领域的童鞋感觉内容比较有帮助&#xff0c;今天就该内容进行讲解。本文介绍的产品适合在消费零售信贷及现金场景贷中的中短期产品&#xff0c;其中涉及的变量参考有…

信贷全生命周期监控报表开发

对于任何一家从事信贷业务的机构而言&#xff0c;监控报表的设计及搭建尤为重要。因为监控报表不仅涉及信贷风控的资产监控&#xff0c;更能反馈客群质量的变化、内部管理手段的调整、策略规则对客群质量的影响等方面。为此&#xff0c;番茄风控输出此系列文章&#xff0c;我们…

信贷全流程监控报表有哪些?

风险策略分析工作是风险管理的重要工作内容&#xff0c;其工作内容需要涉及风控领域中多个环节及细节内容&#xff0c;包含贷前策略调整、策略分析调优、贷中业务监控、贷后策略调整等模块内容&#xff0c;涉及相关模块工作细节及工作内容&#xff0c;我们将一一为大家梳理及分…

详解小微机构贷前准入规则

关注 “番茄风控大数据”&#xff0c;获取更多数据分析与风控大数据的实用干货 嗨同学们好&#xff0c;现在疫情的情况已经出现大反转&#xff0c;我们国内的疫情已经控制住&#xff0c;多个城市都出现了连续多年0增长&#xff0c;一二线城市的部分公共场合也陆续对外开放&…

催收评分卡是如何搭建的?

1、背景 在整个风控体系中&#xff0c;一般分为贷前、贷中和贷后&#xff0c;贷前一般包括反欺诈和A卡&#xff0c;贷中一般使用B卡&#xff0c;贷后一般使用C卡&#xff0c;随着现在监管的越来越严格&#xff0c;催收的合规性越来越重要&#xff0c;所以各持牌金融机构越来越…

贷款中介业务管理系统-具备完善的贷前审批及贷后监管功能

一、系统介绍 银行贷款中介平台&#xff08;助保贷平台&#xff09;是一套适用于当今时代的中介系统&#xff0c;对于借款人来说可以满足他们上学、培训、旅游、购物等。平台根据各借款人资质推介给各银行或用自有资金放款。贷款中介系统提供了一套完善的网络借贷系统&#xff…

一文带你了解助贷行业

原文作者&#xff1a;宁阿姨&#xff08;知乎ID&#xff09; 原文链接&#xff1a;https://zhuanlan.zhihu.com/p/485880345 注&#xff1a;仅限自己学习使用 日常消费用花呗用信用卡&#xff0c;个人周转用借呗或微粒贷&#xff0c;买车买房用车贷房贷&#xff0c;作为消费者…

贷后催收中的风险联动管控指标

在番茄风控大数据之前的文章中&#xff0c;之前跟大家介绍过催收相关内容&#xff1a;催收小词典&#xff0c;助你轻松讨回债务。 今天文章会再跟大家介绍在这些催收指标中&#xff0c;哪些指标是可以反馈到贷前贷中风控环节的。在策略整体优化流程而言&#xff0c;数据是流动…