news 2026/5/11 11:51:00

二十三种设计模式(十三)--模板方法模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二十三种设计模式(十三)--模板方法模式

模板方法模式(Template Method)

模板方法模式将算法流程与算法具体实现相分离的结构.
首先, 定义一个抽象类, 抽象类中有一个不可重写的final方法, 这个方法中封装核心的算法流程, 但这个流程中只有方法调用, 没有具体实现.
具体的方法实现由子类完成, 一些方法是抽象方法, 子类必须实现, 另一些方法则是钩子方法, 子类选择性实现.
代码示例:

// 模板方法类, 只定义核心逻辑, 提供算法框架, 不进行具体实现abstractclassHero{// 这个createHero方法中定义固定的逻辑, 所有子类都遵循这里的顺序// 有些方法子类必须实现, 也有部分钩子方法子类可选择性实现publicfinalvoidcreateHero(){try{System.out.print("身形: ");createBody();System.out.print("肌肉: ");if(createMuscles()){System.out.println(" 身形健硕, 极其勇猛");}else{System.out.println("无");}System.out.print("武器: ");if(createWeapon()){System.out.println(" 真理面前, 众生平等");}else{System.out.println("没有武器");}System.out.print("技能: ");createSkill();System.out.print("头戴: ");createHat();System.out.print("名号: ");sayName();}catch(Exceptione){System.out.println("[Exception] "+e.getMessage());}}abstractvoidcreateHat();abstractvoidcreateSkill();abstractvoidcreateBody();// 钩子方法booleancreateMuscles(){returnfalse;}booleancreateWeapon(){returnfalse;}abstractvoidsayName();}classZhangFeiextendsHero{@OverridevoidcreateHat(){System.out.println("黑帅盔");}@OverridevoidcreateBody(){System.out.println("身高七尺,皮肤黝黑");}@OverridevoidcreateSkill(){System.out.println("声如洪钟, 骁勇善战");}@OverridevoidsayName(){System.out.println("燕人张飞张翼德");}@OverridebooleancreateMuscles(){System.out.println("肌肉发达, 耐力非比寻常");returntrue;}@OverridebooleancreateWeapon(){System.out.println("丈八蛇矛");returntrue;}}classLvBuextendsHero{@OverridevoidcreateHat(){System.out.println("紫金冠");}@OverridevoidcreateBody(){System.out.println("身高八尺,英俊无比");}@OverridevoidcreateSkill(){System.out.println("辕门射戟神技, 战力非凡");}@OverridevoidsayName(){System.out.println("九原吕布吕奉先");}@OverridebooleancreateMuscles(){System.out.println("肌肉结实,身材魁梧");returntrue;}@OverridebooleancreateWeapon(){System.out.println("方天画戟");returntrue;}}

调用及执行:

publicclassTemplateMethodPattern{publicstaticvoidmain(String[]args){ZhangFeizhangfei=newZhangFei();zhangfei.createHero();System.out.println("=================");LvBulvbu=newLvBu();lvbu.createHero();}}

执行结果:

身形: 身高七尺,皮肤黝黑 肌肉: 肌肉发达, 耐力非比寻常 身形健硕, 极其勇猛 武器: 丈八蛇矛 真理面前, 众生平等 技能: 声如洪钟, 骁勇善战 头戴: 黑帅盔 名号: 燕人张飞张翼德 ================= 身形: 身高八尺,英俊无比 肌肉: 肌肉结实,身材魁梧 身形健硕, 极其勇猛 武器: 方天画戟 真理面前, 众生平等 技能: 辕门射戟神技, 战力非凡 头戴: 紫金冠 名号: 九原吕布吕奉先

模板方法能够让子类只实现算法的局部功能, 而不是去实现整个算法结构, 在实际开发中有效分离算法与实现.
在思考一个算法时, 考虑有哪些共同的步骤是在各种情况中反复出现的, 把他们都分步抽出来,
然后各种情况的实现类去实现这些有差异的部分

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 11:33:23

Qwen-Image API调用指南:文生图与图像编辑实战

Qwen-Image API调用指南:文生图与图像编辑实战 你有没有这样的体验? 设计师加班到凌晨,只为改一句文案重出一张海报;运营反复提交需求,结果生成的图总差“那么一点意思”;产品想做个A/B测试,却因…

作者头像 李华
网站建设 2026/5/9 1:32:41

因为研究平台arm,RK3588交叉编译误把我笔记本X86平台的/x86_64-linux-gnu文件删除,导致联想拯救者笔记本中的ubuntu系统损坏

因为研究 arm平台的RK3588交叉编译误把我笔记本X86平台的/x86_64-linux-gnu文件删除,导致联想拯救者笔记本中的ubuntu系统损坏 解决方法: 进入U盘临时ubuntu系统,然后把备份好 x86_64-linux-gnu 文件拷贝到 usr/lib下。 具体步骤&#xff1…

作者头像 李华
网站建设 2026/5/9 1:03:45

ACE-Step:开源音乐生成模型快速部署指南

ACE-Step:开源音乐生成模型快速部署指南 在 AI 创作工具不断进化的今天,我们正见证一个激动人心的转折点 —— 音乐创作不再是少数专业人士的专属领域。随着 ACE-Step 的横空出世,哪怕你不会五线谱、不懂和弦进行,也能通过一段文…

作者头像 李华
网站建设 2026/5/9 1:03:54

Java集合操作(List、Set、Map)

List元素有序//.add增List<Integer> intlist new ArrayList<>();intlist.add(12);intlist.add(99);intlist.add(88);intlist.add(77);intlist.add(55);//.remove 删intlist.remove(1);//删除对应索引的值如果List中是整形&#xff0c;在remove特定整形时用.remove…

作者头像 李华
网站建设 2026/5/12 2:00:02

Mybatis基础使用教程

什么是MyBatis?• MyBatis是⼀款优秀的 持久层 框架&#xff0c;⽤于简化JDBC的开发。• MyBatis本是 Apache的⼀个开源项⽬iBatis&#xff0c;2010年这个项⽬由apache迁移到了google code&#xff0c;并 且改名为MyBatis 。2013年11⽉迁移到Github.• 官⽹&#xff1a;MyBati…

作者头像 李华
网站建设 2026/5/9 1:03:31

弹论:为投资者打造稳定投资之路

在金融投资的世界里&#xff0c;投资者都渴望拥有一条稳定的投资之路&#xff0c;能够在市场的风浪中稳健前行。而弹论以其判断趋势、分区操作和避免频繁换手的优势&#xff0c;为投资者打造了这样一条稳定投资之路。弹论优势的全面阐述弹论是一种基于均线理论的创新交易方法&a…

作者头像 李华