第3篇:手写一个饮品制作模板(附代码)

第3篇:手写一个饮品制作模板(附代码)

摘要:泡茶和冲咖啡的代码怎么写才能不重复?本文手把手教你用模板方法模式实现一个饮品制作模板,包含抽象父类、茶和咖啡两个子类、钩子控制加调料,并附完整运行结果,一看就懂。泡茶和冲咖啡的代码怎么写才能不重复?本文手把手教你用模板方法模式实现一个饮品制作模板,包含抽象父类、茶和咖啡两个子类、钩子控制加调料,并附完整运行结果,一看就懂。​

本文是《Java 23 种设计模式:从踩坑到精通》模板方法模式长文的扩充短文第3篇,帮助你碎片化掌握核心知识点。

前两篇我们理解了模板方法模式的思想和结构,今天直接上手写代码,用一杯茶和一杯咖啡验证"固定骨架、填充细节"的精髓。


抽象父类:定义骨架

java 复制代码
public abstract class BeverageMaker {

    // 模板方法,final 防止子类篡改流程
    public final void makeBeverage() {
        boilWater();              // 通用步骤
        brew();                   // 可变步骤(子类实现)
        pourInCup();              // 通用步骤
        if (wantCondiments()) {   // 钩子方法
            addCondiments();      // 可变步骤(子类实现)
        }
    }

    private void boilWater() {
        System.out.println("把水烧到 100°C");
    }

    private void pourInCup() {
        System.out.println("倒入杯中");
    }

    protected abstract void brew();
    protected abstract void addCondiments();

    // 钩子方法:默认加调料
    protected boolean wantCondiments() {
        return true;
    }
}

具体子类:茶

java 复制代码
public class TeaMaker extends BeverageMaker {
    @Override
    protected void brew() {
        System.out.println("用热水浸泡茶叶");
    }

    @Override
    protected void addCondiments() {
        System.out.println("加柠檬");
    }
}

具体子类:咖啡(带钩子控制)

java 复制代码
public class CoffeeMaker extends BeverageMaker {
    @Override
    protected void brew() {
        System.out.println("用热水冲泡咖啡粉");
    }

    @Override
    protected void addCondiments() {
        System.out.println("加糖和牛奶");
    }

    // 重写钩子:喝黑咖啡不加料
    @Override
    protected boolean wantCondiments() {
        return false;
    }
}

客户端测试

java 复制代码
System.out.println("=== 制作茶 ===");
BeverageMaker tea = new TeaMaker();
tea.makeBeverage();

System.out.println("\n=== 制作咖啡 ===");
BeverageMaker coffee = new CoffeeMaker();
coffee.makeBeverage();

运行结果:

java 复制代码
=== 制作茶 ===
把水烧到 100°C
用热水浸泡茶叶
倒入杯中
加柠檬

=== 制作咖啡 ===
把水烧到 100°C
用热水冲泡咖啡粉
倒入杯中

注意:咖啡的输出中没有"加糖和牛奶",因为 wantCondiments()返回 false,跳过了加调料步骤。


一句话总结:父类写好流程,子类只管填空,钩子让你灵活开关。


📖 完整长文入口:本文是模板方法模式扩充系列的第3篇。如果你想一次性阅读完整内容(含UML、完整代码、框架应用、面试追问等),请查看原长文:

👉 《Java 23 种设计模式:从踩坑到精通 | 模板方法模式》

🔗 系列导航:

相关推荐
斯维赤8 小时前
从 @Tool 到 Agent 流水线:LangChain4j 进阶教学,一个库打全套
java·后端
SimonKing8 小时前
SSE项目`nexus-sse`持续优化,不一样的视觉效果
java·后端·程序员
斑鸠喳喳8 小时前
读写锁模式 Read-Write Lock
java·后端
信誓旦旦的程序猿9 小时前
【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据api
小程序设计10 小时前
本科毕设避坑|大数据 / 单片机物联网 / 网络工程 / PLC / 机械设计选题与落地心得
java·hive·hadoop·单片机
卓怡学长10 小时前
w206基于SpringBoot的社区团购小程序设计与实现
java·spring boot·spring·intellij-idea
IT枫斗者枫哥15 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
代码方舟15 小时前
Java数据工程:利用天远全网运营商三要素优化线上实名认证合规体验
java·人工智能
BBmmo15 小时前
我的 Java 学习笔记 · 第 7 篇:泛型与通配符
java
独泪了无痕15 小时前
Hutool之RandomUtil:随机数生成的终极利器
java·后端