【设计模式】模板模式

article/2025/10/25 21:41:40

博主声明:

转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主 威威喵 原创,请多支持与指教。

本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/smile_running

    这是23种设计模式中的模板模式(template pattern),也是最简单的设计模式之一。何为模板,就是指一种已经规定的格式,一种套路。它的作用:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

    我们在大学时期不经常干的事就是拿别人的 PPT、Wrod 改一改就交上去了吗,其中改变的肯定就是将自己的姓名、学号、心得体会等替换掉,剩下的就看老师给不给过了,哈哈!

    其中运用的就是模板模式,将一些规定好的格式写成模板,改变的只是自己的个人信息。然后,又来了一位同学,问你有没有不要的作业啊,然后你又将自己作业发了一份给他,他又改成了自己的信息,完美的做到了作业复用的效果,也就是我们经常说的代码复用。成功的骗过了老师,你们都得了个 D ,哈哈哈哈,额,也许这个模板不够好。

    模板模式,你可能都用过,只是没有这个概念而已。一般而言,Base基类都使用了模板模式,将子类相同的操作抽离到父类中,把不同的抽象给子类实现,这就是模板模式。

    虽然很简单,但还是手写一些些代码过过瘾吧。这次,我用的是英雄联盟这个游戏来做例子,这大家再熟悉不过了,游戏要打的好,代码也要敲的好!

5v5,10个玩家,打开英雄联盟客户端、登入游戏,进入排位、禁英雄、选英雄、骚操作、输了、看评分,甩锅给队友(举报),退出了游戏!多么完美的流程,我们用代码实现就是这样:

玩家 1 :

package com.xww.dp.template;public class Player1 {public Player1() {System.out.println("玩家1");}public void login() {System.out.println("登入游戏");}public void start() {System.out.println("排位");}public void ban() {System.out.println("禁用了:瞎子-盲僧");}public void select() {System.out.println("选用了:儿童劫-劫");}public void report() {System.out.println("举报:玩家2-托儿所-亚索");}public void exit() {System.out.println("退出游戏");}
}

 玩家 2:

package com.xww.dp.template;public class Player2 {public Player2() {System.out.println("玩家2");}public void login() {System.out.println("登入游戏");}public void start() {System.out.println("排位");}public void ban() {System.out.println("禁用了:小学生之手-诺克萨斯之手");}public void select() {System.out.println("选用了:托儿所-亚索");}public void report() {System.out.println("举报:玩家1-儿童劫-劫");}public void exit() {System.out.println("退出游戏");}
}

    其他玩家我就不写代码了,因为都一样,我们举个例子就行!然后,我们写个 Main 方法,让它们运行起来。

package com.xww.dp.template;public class TemplatePatternClient {public static void main(String[] args) {Player1 p1 = new Player1();p1.login();p1.start();p1.ban();p1.select();p1.report();p1.exit();System.out.println("--------------");Player2 p2 = new Player2();p2.login();p2.start();p2.ban();p2.select();p2.report();p2.exit();}
}

 日志输出:

  • 使用模板模式

    我们再看看程序,这两个代码几乎一模一样,代码重复怎么办?只能考虑抽离到父类了。一套约定熟成的模板模式,其中能变化的就是禁用英雄、选英雄、举报的步骤,其它的操作每个玩家都有,也就可以抽离到父类中去,我们看看代码如何实现!

抽象基类BasePlayer 类:我们将玩家1和玩家2相同的部分抽取到 BasePlayer 基类中,将不同的部分保留下来。

package com.xww.dp.template;public abstract class BasePlayer {public void login() {System.out.println("登入游戏");}public void start() {System.out.println("排位");}protected abstract void ban();protected abstract void select();protected abstract void report();public void exit() {System.out.println("退出游戏");}}

改写玩家1类,继承 BasePlayer :

package com.xww.dp.template;public class Player1 extends BasePlayer{public Player1() {System.out.println("玩家1");}@Overrideprotected void ban() {System.out.println("禁用了:瞎子-盲僧");}@Overrideprotected void select() {System.out.println("选用了:儿童劫-劫");}@Overrideprotected void report() {System.out.println("举报:玩家2-托儿所-亚索");}
}

改写玩家2类,同样继承 BasePlayer :

package com.xww.dp.template;public class Player2 extends BasePlayer{public Player2() {System.out.println("玩家2");}@Overrideprotected void ban() {System.out.println("禁用了:小学生之手-诺克萨斯之手");}@Overrideprotected void select() {System.out.println("选用了:托儿所-亚索");}@Overrideprotected void report() {System.out.println("举报:玩家1-儿童劫-劫");}
}

    Main 方法不需要改变,因为这是执行的流程,所以一般而言使用模板方法是不影响程序逻辑的,原先什么逻辑还依旧是什么逻辑,代码照样可以运行才对。我们看运行结果:

    与改写前的运行结果完全一致,不影响程序的逻辑,使得代码可以得到复用,更能体现面向对象编程的思维,运用到了继承、抽象方法的编程手段。简而言之,通过这个例子,相信你会很快的掌握模板模式,并且要将这种设计模式充分的运用到自己的项目中去,那才会真正的体会到模板模式给我们带来的快乐!


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

相关文章

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

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

设计模式——模板模式

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

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

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

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

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

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

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

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

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

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

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

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

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

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

关注 “番茄风控大数据”,获取更多数据分析与风控大数据的实用干货 嗨同学们好,现在疫情的情况已经出现大反转,我们国内的疫情已经控制住,多个城市都出现了连续多年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…