什么是模板模式
发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这篇文章主要介绍"什么是模板模式",在日常操作中,相信很多人在什么是模板模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"什么是模板模式"的疑惑有所帮助!接下来,请跟着
千家信息网最后更新 2024年12月13日什么是模板模式
这篇文章主要介绍"什么是模板模式",在日常操作中,相信很多人在什么是模板模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"什么是模板模式"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
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安全错误
数据库的锁怎样保障安全
服务器750W怎么测是好的
阿里云数据库主备切换
政府组织信息系统软件开发
软件开发需要什么映射
东莞市委网络安全委员会
网络安全执法检查工作情况
云服务器查看容器命令
地税网络安全制度建设
阿里云服务器 外网ip
数据库引擎的未来
政府如何保障网络安全
阿德莱德大学网络安全专业
什么软件开发儿童智力免费
网络安全法一般安全义务
索菲互联网科技公司
数据传输网络安全问题有哪些
厦门农商网络技术有限公司
报名系统数据库设计
技术骨干为青年员工讲网络技术课
java数据库插入换行符号
旌德微型软件开发服务零售价格
数据库链接池推荐
杨浦区常见网络技术设置
跨行网络安全怎么样
游戏软件开发的职业能力倾向
网络安全培训班出来一般工资多少
数据库打开灰色的
计算机网络技术用人标准
信息与 网络安全
知富服务器