第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 种设计模式:从踩坑到精通 | 模板方法模式》

🔗 系列导航

相关推荐
phltxy6 小时前
C语言操作符详解
java·c语言·算法
步行cgn7 小时前
@Configuration 详解:Spring 配置类的核心注解
java·后端·spring
sunshine22 girl7 小时前
Java学习一 环境配置2 安装和基本使用Idea
java·学习·intellij-idea
嘿嘿-668 小时前
Windows 一键使用 GPT-6 Astra:Codex CLI 配置教程
java·人工智能·windows·gpt·chatgpt·web
码匠许师傅9 小时前
【设计模式精讲】22.中介者模式(Mediator)
c++·设计模式·软件工程·uml·中介者模式
策案案案10 小时前
YOLO: 将AI Agents嵌入到IntelliJ IDEA
java·大数据·人工智能·笔记·yolo·microsoft·intellij-idea
辰烨chenye11 小时前
LeetCode Hot 100 题解 · 堆篇
java·算法·leetcode
shehuiyuelaiyuehao11 小时前
算法29,前缀和,除自身以外的数组的乘积
java·数据结构·算法
小刘在重生~12 小时前
Java常用类|String类详解 + BigDecimal精准计算(含面试题)
java·开发语言·python
随遇而安zx12 小时前
【多线程】---JMM 与 volatile 深度解析
java·多线程