千家信息网

Java设计模式之模板方法模式实例分析

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,本文小编为大家详细介绍"Java设计模式之模板方法模式实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Java设计模式之模板方法模式实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
千家信息网最后更新 2025年11月09日Java设计模式之模板方法模式实例分析

本文小编为大家详细介绍"Java设计模式之模板方法模式实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"Java设计模式之模板方法模式实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

模板方法模式

模板方法模式法(Template Method)定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

模板方法模式包含以下主要角色:

  • 抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。

    • 抽象方法(Abstract Method) :一个抽象方法由抽象类声明、由其具 体子类实现。

    • 具体方法(Concrete Method) :一个具体方法由一个抽象类或具体类声明并实现,其子类可以进行覆盖也可以直接继承。

    • 钩子方法(Hook Method) :在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。一般钩子方法是用于判断的逻辑方法,这类方法名一般为isXxx,返回值类型为boolean类型。

    • 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。

    • 基本方法:是实现算法各个步骤的方法。基本方法又可以分为三种:

  • 具体子类(Concrete Class):实现抽象类中所定义的抽象方法和钩子方法,它们是一个顶级逻辑的组成步骤。

【案例】

炒菜的步骤是固定的,分为倒油、热油、倒蔬菜、倒调料品、翻炒等步骤。但是可以倒入不同的蔬菜和不同的酱料。现通过模板方法模式来用代码模拟

public class TemplateTest {    public static void main(String[] args) {        //炒包菜        BaoCai baoCai = new BaoCai();        baoCai.cookProcess();        System.out.println("-------------");        //炒白菜        BaiCai baiCai = new BaiCai();        baiCai.cookProcess();    }}abstract class AbstractClass{ //抽象类    //模板方法定义    public final void cookProcess() {        this.pourOil();//倒油        this.heatOil();//热油        this.pourVegetable();//倒蔬菜        this.pourSauce();//倒调味料        this.fry();//翻炒    }    public abstract void pourVegetable();//倒蔬菜是不一样的(一个下包菜,一个是下白菜)    public abstract void pourSauce();//倒调味料是不一样    public void pourOil() {System.out.println("倒油");}    public void heatOil() {System.out.println("热油");}    public void fry(){System.out.println("炒啊炒");}}class BaoCai extends AbstractClass{    public void pourVegetable() {System.out.println("加入包菜");}    public void pourSauce() {System.out.println("加入辣椒酱");}}class BaiCai extends AbstractClass{    public void pourVegetable() {System.out.println("加入白菜");}    public void pourSauce() {System.out.println("加入盐和味精");}}

【运行结果】

倒油
热油
加入包菜
加入辣椒酱
炒啊炒
-------------
倒油
热油
加入白菜
加入盐和味精
炒啊炒

Process finished with exit code 0

模板方法模式的优缺点

优点:

1、提高代码复用性,将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中。

2、实现了反向控制,通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制 ,并符合"开闭原则"。

缺点:

1、对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象。

2、父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。

使用场景

1、算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。

2、需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控制。

读到这里,这篇"Java设计模式之模板方法模式实例分析"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

方法 子类 模式 模板 步骤 算法 不同 代码 热油 设计 白菜 蔬菜 控制 实例 实例分析 设计模式 分析 文章 结果 逻辑 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 房地产风险数据库 大学校车管理系统数据库 数据库审计需要引用流量吗 打开电脑服务器管理器快捷键 计算机网络技术发展最新领域 青岛软件开发驻场哪家正规 学嵌入式软件开发找什么公司 意识形态网络安全工作会议 落实网络安全保障工作的措施 烽火服务器自己制造吗 深圳系统软件开发费用是多少 计算机面试网络安全问题 深圳市厚昌网络技术有限公司 网站服务器域名怎么做 电脑当游戏服务器需要什么条件 软件开发常用编程语言有哪些 软件开发的一次性版本 gom引擎物品数据库加载不了 株洲哪个大学有软件开发 青海省软件开发人才需求 迷你世界云服务器管理员 电脑文件服务器管理共享权限 网咖网络安全需求 军人蓝卡写数据库失败 数据库审计需要引用流量吗 win10基岩版怎么进服务器 思科网络技术笔记 12v服务器开关电源改装 sql数据库支持哪些类型 数据库需求分析贩卖机
0