设计模式——模板模式

article/2025/10/25 21:43:32

更多内容,前往 IT-BLOG

在面向对象程序设计过程中,程序员常常会遇到如下情况:设计一个系统时知道算法所需的关键步骤,且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如:去医院看病一般都要经历以下流程:挂号、排队、就诊、取药等,其中挂号和排队对每个客户都是一样的,可以在父类中实现,但是就诊和取药是因人而异的。可以延迟到子类中实现。我们把这些规定了流程或格式的实例定义成模板,允许使用者根据自己的需求去更新它。

一、模板模式的基本介绍


1)、模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行此方法的模板。它的子类可以按照需要重写方法实现,但调用将以抽象类中定义的方式进行。
2)、简单说,模板方法模式定义了一个操作中的算法骨架,而将步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。
3)、这种类型的设计模式属于行为型模式。

二、模板方式的特点


模板方式的优点:【1】封装了不变的部分,扩展可变部分。将不变部分的算法封装到父类中实现,而把可变部分的算法由各子类实现。便于子类继续扩展。
【2】在父类中提取了公共的部分代码,便于代码复用。
【3】部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。
模板方式的缺点:【1】对每个不同的实现都需要定义一个子类,这个导致类的个数增加,系统更加庞大,设计也更加抽象。
【2】父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,提高了代码的阅读难度。
使用场景:【1当多个子类具有公用的方法,却执行流程逻辑相同时。
【2】重要的、复杂的方法,可以考虑作为模板方法。
注意事项:为了防止恶意操作,一般模板方法上都加有 final 关键字

三、模板方法模式结构类图


模板方法模式包含以下主要角色:【1】抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成,如下:
    ① 抽象方法:在抽象类中申明,由具体子类实现。
    ② 具体方法:在抽象类中已经实现,再具体子类中可以继承或重写它。
    ③ 钩子方法:在抽象类中已经实现,例如:用于判断的逻辑方法或者定义一个空方法。子类根据情况要不要重写此方法,此方法为钩子方法。例如下面实例中的 isRecipe() 方法。
【2】具体子类(Concrete Class):实现抽象类中所定义的抽象方法和钩子方法,它们是一个顶级逻辑的一个组成步骤。

四、 模板方式模式案例分析


【1】抽象类(医院看病时,整个流程的抽象类)真个流程属于不可变的,因此我使用了 final 修饰。

public abstract class AbstractHospital {//流程public final void procedure() {//1、挂号this.regiest();//2、排队this.queue();//3、看病this.treat();//4、取药,有点人不用开药,只是小事if(isRecipe()) {this.recipe();}}//挂号public String regiest() {String regiest = "你的订单号为"+((int) (Math.random()*10));System.out.println(regiest);return regiest;}//排队public void queue() {System.out.println("排队中。。。。");}//看病public abstract String  treat();//取药public abstract String recipe();//钩子方法boolean isRecipe() {return true;}
}

【2】抽象类的具体实现类(有多个,我们只写一个)

public class Patient_A extends AbstractHospital{@Overridepublic String treat() {String treat = "胃病";System.out.println("你的病为"+treat);return treat;}@Overridepublic String recipe() {String recipe = "健胃消食片";System.out.println("药单:"+recipe);return recipe;}//重写钩子方法@Overrideboolean isRecipe() {return false;}
}

【3】客户端类:创建子类对象,流程调用的是父类公共的流程方法。

public class Client {public static void main(String[] args) {//A 病人看病Patient_A patient_A = new Patient_A();//看病的流程patient_A.procedure();/*** 输出如下:* 你的订单号为2* 排队中。。。。* 你的病为胃病* 药单:健胃消食片 ==== 加了钩子程序则不显示*///B 病人看病,的流程也是一样,只需要实例化B,并调用公共的模板流程即可,提高代码的利用率}
}

五、模仿方法模式应用源码分析


模板方法模式在 Spring 框架应用的源码分析:Spring IOC 容器初始化时运用到了模板方法模式;

【1】抽象类:AbstractApplicationContext 继承接口(ConfigurableApplicationContext)其中的 refresh 方法就是模板方法,定义了执行的流程,方法中包含钩子方法、子类需要实现的抽象方法(refreshBeanFactory)、父类已实现的方法等等。

public abstract class AbstractApplicationContext extends DefaultResourceLoaderimplements ConfigurableApplicationContext, DisposableBean {......@Overridepublic void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {prepareRefresh();ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();prepareBeanFactory(beanFactory);try {// 钩子方法,子类自行选择是否重写postProcessBeanFactory(beanFactory);invokeBeanFactoryPostProcessors(beanFactory);registerBeanPostProcessors(beanFactory);// 父类已实现initMessageSource();// 由父类进行实现initApplicationEventMulticaster();// 钩子方法onRefresh();registerListeners();finishBeanFactoryInitialization(beanFactory);// 父类实现finishRefresh();}catch (BeansException ex) {destroyBeans();cancelRefresh(ex);throw ex;}}}......
}

【2】构建 AbstractApplicationContext  类图:

六、模板方法模式的注意事项和细节


【1】基本思想是:算法只存在于一个地方,也就是父类中,容易修改。需要修改算法时,只要修改父类的模板方法或者已经实现的某些步骤,子类就会继承这些修改。
【2】实现了最大化代码复用。父类的模板方法和已实现的某些步骤会被子类继承且直接使用。
【3】既统一了算法,也提供了很大的灵活性。父类的模板方法确保了算法的结构不变,同时由子类提供部分步骤的实现。
【4】该模式的不足之处:每一个不同的实现都需要一个子类实现,导致类的个数增多,使得系统更加庞大。
【5】模板方式的使用场景:存在执行一系列步骤,且一类产品的此步骤基本相同,但其中个别步骤的实现细节不同时,通常可以考虑使用模板方法模式。


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

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

一文带你了解助贷行业

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

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

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

现金贷、信用贷、消费贷小贷系统后台、现金贷、消费贷、信用贷、助学贷、旅游贷、装修贷、准入授信 、贷款申请、产品授信、合同管理、放款审批、放款登记、还款管理、贷后检查、贷后预警、贷款结项、Axure原型

现金贷、信用贷、消费贷小贷系统后台、现金贷、消费贷、信用贷、助学贷、旅游贷、装修贷、准入授信 、贷款申请、产品授信、合同管理、放款审批、放款登记、还款管理、贷后检查、贷后预警、贷款结项、 Axure原型演示及下载地址:Axure Cloud - Generating Project …

什么是银行测试业务?银行测试业务包括哪些?

我们知道软件测试是为了保证软件的质量和可靠性而在新软件系统上线之前对软件进行的质量检测工作。通过软件测试这个过程找出软件中的错误,分析错误的产生原因和容易产生错误的区域,进而有针对性的设计测试方法提高软件测试的效率。 以上简单讲述了一下…

贷前贷中风控体系

消费金融服务方:金融系、场景系、互联网系 第三方支撑平台:获客平台、风控支持、系统服务、支付平台、贷后管理 消费金融风控全流程 贷前审查:信息采集、信息验证、反欺诈 贷中评估:信用评估、授信 贷后管理:贷后…

贷中管理-理论

Part1 什么是贷中管理 贷中管理:值从贷款发放之日起,至贷款本息收回日期为止的贷款管理。 不同于贷前和贷后管理,贷后管理早期在信贷管理较为薄弱,且没有明确的业务目标。但随着催收压力逐渐加大,且贷中管理存在大量的…

贷前中后简单记录

前中后 贷前贷中贷后是一个业务分类,是用户信贷生命周期的三个阶段。并不是一个业务架构或者技术架构。以下的贷前贷中贷后主要是互金领域的情况,传统银行也有贷前贷中贷后,但是做法不同。 贷前 1、准入/额度/利率 贷前的核心就是两个&am…

艾肯4nano_Utrack_micu_mobile等声卡调试_网络主播防坑必学技能

小伙音频技术专业声卡调音师讲解关于艾肯声卡的调试与选用技巧,防坑必看!更多咨询也可关注声卡调试教程论坛 一: 4、6nano; Utrack; micu;mobile ; Uporst2/4/6 等这几款支持效果精调 &a…

艾肯声卡调试机架安装教程与下载_2019最新推荐

哈喽大家好,我是你们的老朋友声卡调试专业网站长小伙音频技术,2019年度艾肯认证授权调音师,尤其擅长各款网络主播直播专用独立声卡的效果精调! 艾肯声卡分老款与新款VST系列,常用ICON声卡micu VST,4nano VS…

艾肯声卡噪音,杂音处理方法

艾肯(icon)外置声卡麦克风【电容麦】噪音,杂音,尾声噪音,声音不干净等主要问题来自哪里?我们可以从以下几个方面进行分析,排查,解决。当然艾肯声卡有多种,比如Cube 4Nano、MicU、Ultra 4、micu …

艾肯声卡安装调试方法【必看】

艾肯声卡英文简称icon,它是一种usb外置声卡,可以用来网络娱乐,k歌,直播,也可以用来录音,后期混音,编曲等。它主要连接在我们电脑usb接口上的,属于电脑外设硬件,现在分新版…