设计模式之模板方法模式

从这节开始,我们进入行为型模式的学习。行为型模式第一个模式就是模板方法模式。

概念:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

只有两个角色,抽象模板和具体模板类。抽象模板负责定义模板方法和其他方法,并在模板方法中以一定顺序调用其他方法。其他方法可以是抽象方法,通常需要子类进行重写(就是所谓的延迟到子类中实现),也可以是具体方法,一般是通用的步骤。

用一个咖啡机的例子帮助大家理解:

java 复制代码
public abstract class CoffeeMaker {
    // 模板方法:制作咖啡的过程
    public final void makeCoffee() {
        grindBeans();
        brew();
        pourIntoCup();
        addCondiments();
    }
    // 基本操作:磨豆子,由子类实现
    abstract void grindBeans();
    // 基本操作:冲泡咖啡,由子类实现
    abstract void brew();
    // 具体操作:将咖啡倒入杯中,这是固定步骤,不需要子类覆盖
    void pourIntoCup() {
        System.out.println("将咖啡倒入杯中");
    }
    // 基本操作:添加调料,由子类实现
    abstract void addCondiments();
}

class EspressoMachine extends CoffeeMaker {
    @Override
    void grindBeans() {
        System.out.println("研磨咖啡豆,磨成意式咖啡粉");
    }
    @Override
    void brew() {
        System.out.println("调制意式浓缩咖啡");
    }
    @Override
    void addCondiments() {
        System.out.println("添加意式浓缩咖啡特有原料");
    }
}

public class LatteMachine extends CoffeeMaker {
    @Override
    void grindBeans() {
        System.out.println("研磨咖啡豆,磨成拿铁咖啡粉");
    }
    @Override
    void brew() {
        System.out.println("调制拿铁咖啡");
    }
    @Override
    void addCondiments() {
        System.out.println("加入牛奶等原料");
    }
}

public class Demo {
    public static void main(String[] args) {
        CoffeeMaker espressoMaker = new EspressoMachine();
        CoffeeMaker latteMaker = new LatteMachine();
        System.out.println("制作意式浓缩咖啡 : ");
        espressoMaker.makeCoffee();
        System.out.println("*********************************分割线****************************************");
        System.out.println("制作拿铁 : ");
        latteMaker.makeCoffee();
    }
}

如果大家需要视频版本的讲解,欢迎关注我的B站:

十四、设计模式之模板方法模式

相关推荐
萧瑟余晖16 分钟前
JDK 26 新特性详解
java·开发语言
马优晨1 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说4 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane19944 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
杨充5 小时前
11.DDD与战术建模
设计模式·开源·代码规范
杨充5 小时前
12.综合实战图片框架
设计模式·开源·代码规范
噢,我明白了5 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品5 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘5 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
Java内核笔记6 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端