模板方法模式
豆浆制作问题
模板方法模式基本介绍
模板方法模式原理类图
模板方法模式解决豆浆制作问题
代码演示

package com.sky.template; /** * 抽象类 豆浆 */ public abstract class SoyMilk { // 模板方法,make() 模板方法可以做成final,不让子类去覆盖 final void make(){ select(); addCondiments(); soak(); beat(); } /** 以下的四个方法也可以用private进行修饰 */ // 选材料 void select(){ System.out.println("第一步:选择好的新鲜的黄豆 "); } // 添加不同的配料,抽象方法,让具体的子类去实现 abstract void addCondiments(); // 浸泡 void soak(){ System.out.println("第三步:黄豆和配料开始浸泡,需要3个小时 "); } // 打磨 void beat(){ System.out.println("第四步:黄豆和配料放到豆浆机中进行打磨 "); } } package com.sky.template; /** * 花生豆浆 */ public class PeanutSoyMilk extends SoyMilk{ /** * 添加配料 */ @Override void addCondiments() { System.out.println("添加上好的花生"); } } package com.sky.template; /** * 黑豆豆浆 */ public class BlackBeanSoyMilk extends SoyMilk{ @Override void addCondiments() { System.out.println("添加上好的黑豆 "); } } package com.sky.template; /** * 客户端 */ public class Client { public static void main(String[] args) { System.out.println("=====制作花生豆浆====="); SoyMilk peanutSoyMilk = new PeanutSoyMilk(); peanutSoyMilk.make(); System.out.println("=====制作黑豆豆浆====="); SoyMilk blackBeanSoyMilk = new BlackBeanSoyMilk(); blackBeanSoyMilk.make(); } } =====制作花生豆浆===== 第一步:选择好的新鲜的黄豆 添加上好的花生 第三步:黄豆和配料开始浸泡,需要3个小时 第四步:黄豆和配料放到豆浆机中进行打磨 =====制作黑豆豆浆===== 第一步:选择好的新鲜的黄豆 添加上好的黑豆 第三步:黄豆和配料开始浸泡,需要3个小时 第四步:黄豆和配料放到豆浆机中进行打磨
模板方法模式的钩子方法
代码演示

package com.sky.template.improve; /** * 抽象类 豆浆 */ public abstract class SoyMilk { // 模板方法,make() 模板方法可以做成final,不让子类去覆盖 final void make(){ select(); if(customerWantCondiments()){ addCondiments(); } soak(); beat(); } /** 以下的四个方法也可以用private进行修饰 */ // 选材料 void select(){ System.out.println("第一步:选择好的新鲜的黄豆 "); } // 添加不同的配料,抽象方法,让具体的子类去实现 abstract void addCondiments(); // 浸泡 void soak(){ System.out.println("第三步:黄豆和配料开始浸泡,需要3个小时 "); } // 打磨 void beat(){ System.out.println("第四步:黄豆和配料放到豆浆机中进行打磨 "); } // 钩子方法 用户判断要不要加配料 TRUE:加 FALSE:不加 boolean customerWantCondiments(){ return true; } } package com.sky.template.improve; /** * 黑豆豆浆 */ public class BlackBeanSoyMilk extends SoyMilk { @Override void addCondiments() { System.out.println("添加上好的黑豆 "); } } package com.sky.template.improve; /** * 花生豆浆 */ public class PeanutSoyMilk extends SoyMilk { /** * 添加配料 */ @Override void addCondiments() { System.out.println("添加上好的花生"); } } package com.sky.template.improve; public class PureSoyaMilk extends SoyMilk{ @Override void addCondiments() { //空实现 注:我们有时候也是能够看到在实际项目开发中也是有这样写的,使用的也是空实现 } @Override boolean customerWantCondiments() { return false; } } package com.sky.template.improve; /** * 客户端 */ public class Client { public static void main(String[] args) { System.out.println("=====制作花生豆浆====="); SoyMilk peanutSoyMilk = new PeanutSoyMilk(); peanutSoyMilk.make(); System.out.println("=====制作黑豆豆浆====="); SoyMilk blackBeanSoyMilk = new BlackBeanSoyMilk(); blackBeanSoyMilk.make(); System.out.println("=====制作纯豆浆====="); SoyMilk pureSoyaMilk = new PureSoyaMilk(); pureSoyaMilk.make(); } } =====制作花生豆浆===== 第一步:选择好的新鲜的黄豆 添加上好的花生 第三步:黄豆和配料开始浸泡,需要3个小时 第四步:黄豆和配料放到豆浆机中进行打磨 =====制作黑豆豆浆===== 第一步:选择好的新鲜的黄豆 添加上好的黑豆 第三步:黄豆和配料开始浸泡,需要3个小时 第四步:黄豆和配料放到豆浆机中进行打磨 =====制作纯豆浆===== 第一步:选择好的新鲜的黄豆 第三步:黄豆和配料开始浸泡,需要3个小时 第四步:黄豆和配料放到豆浆机中进行打磨
模板方法模式的注意事项和细节
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY