千家信息网

什么是模板模式

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"什么是模板模式",在日常操作中,相信很多人在什么是模板模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"什么是模板模式"的疑惑有所帮助!接下来,请跟着
千家信息网最后更新 2026年11月01日什么是模板模式

这篇文章主要介绍"什么是模板模式",在日常操作中,相信很多人在什么是模板模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"什么是模板模式"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、概述

模板模式:封装了一个算法步骤(prepareRecipe),并允许子类为一个或多个步骤方法提供实现模板模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤。

模板是一个抽象类,模板中所包含的内容:

1、算法步骤,使用final修饰,子类不可更改

2、已经实现的方法,使用final修饰,子类不可更改

3、抽象的方法

4、hook钩子,子类可自定义实现

如泡茶和泡咖啡,总共有以下四个步骤:

1、烧水

2、冲泡

3、倒入杯子中

4、添加调味品

所以我们将这四个步骤定义成一个模板,具体代码如下

public abstract class HotDrink {    // 封装了算法步骤,使用final修饰,表示子类不能更改算法步骤    public final void prepareRecipe() {        boilWater();                brew();        pourInCup();        addCondiments();    }    public abstract void boilWater();    public abstract void brew();    public abstract void pourInCup();    public abstract void addCondiments();}

由于泡茶和泡咖啡的第一步和第三步操作是相同的,所以我们可以对父类模板作进一步的优化

public abstract class HotDrink {    public final void prepareRecipe() {        boilWater();                brew();        pourInCup();        addCondiments();    }    // 已经实现的方法    public final void boilWater() {        System.out.println("Boiling water");    }    // 抽象方法    public abstract void brew();    public  final void pourInCup() {        System.out.println("Pouring into cup");    }    public abstract void addCondiments();}

泡茶类实现如下

public class Tea extends HotDrink{    @Override    public void brew() {        System.out.println("Brewing tea");    }    @Override    public void addCondiments() {        System.out.println("Adding lemon");    }}

泡咖啡类实现如下

public class Coffee extends HotDrink{    @Override    public void brew() {        System.out.println("Brewing Coffee ");    }    @Override    public void addCondiments() {        System.out.println("Adding sugar and milk");    }}

运行类实现如下

public class MainTest {    public static void main(String[] args) {            HotDrink mCoffee = new Coffee() ;        HotDrink tea = new Tea();        mCoffee.prepareRecipe();        tea.prepareRecipe();    }}

2、模板模式中的hook

虽然超类的算法步骤是final的,但是子类可以通过覆盖hook函数的方法来影响超类的算法步骤

hook为子类覆盖方法的可选项,父类默认实现,子类可进行覆盖后更改

如泡茶和泡咖啡中的第四步,假如我们将模板定义为第四步是可以选项,则我们可以将模板代码定义成如

public abstract class HotDrinkTemplate {    public final void prepareRecipe() {            boilWater();                brew();        pourInCup();                // 默认为加佐料        if(wantCondimentsHook()){            addCondiments();        }else{            System.out.println("No Condiments");        }    }        // hook方法默认实现,子类可覆盖    public boolean wantCondimentsHook() {        return true;    }        public final void boilWater() {        System.out.println("Boiling water");    }    public abstract void brew();    public  final void pourInCup() {        System.out.println("Pouring into cup");    }    public abstract void addCondiments();}

子类可实现如下

public class TeaWithHook extends HotDrinkTemplate{    @Override    public void brew() {        System.out.println("Brewing tea");    }    @Override    public void addCondiments() {        System.out.println("Adding lemon");    }    @Override    public boolean wantCondimentsHook()    {        return false;    }}

到此,关于"什么是模板模式"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

模板 子类 步骤 方法 算法 模式 咖啡 学习 代码 更多 封装 帮助 实用 相同 接下来 佐料 内容 函数 可以使 可以通过 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 科技互联网 上海喔噻互联网科技有限公司 亿人帮互联网科技有限公司 深圳互联网络科技有限公司 丰台科技园 互联网 沃里互联网科技 时间互联网络科技 互联网科技网站 西藏七维空间互联网科技有限公司 受益于互联网科技的高速发展 互联网公司科技股 华夏互联网科技业 米聚互联网科技南京有限公司排面 科技赋能视角下互联网保险发展 皮皮虾互联网科技有限公司 保山互联网科技靠谱吗 数字互联网科技有限公司 北京品多多互联网科技有限公司 平安好医生打造互联网科技医疗 广州百单互联网科技有限公司 金融科技与互联网金融 上海挚品互联网科技 顺玮阁互联网科技 郑州华宇互联网科技 广州紫鲸互联网科技 银川新华互联网科技学校地址 银川新华互联网科技职业技术培训学校图片 互联网企业科技类企业如何做账 互联网科技包装股份有限公司上市
0