设计模式 - 模板方法模式

该模式将定义一个操作中的算法骨架,并将算法的一些步骤延迟到子类中实现,使得子类可以在不改变算法结构的情况下重定义算法的某些特定步骤。

例如,炒菜的步骤是固定的,具体可分为倒油、热油、倒蔬菜、倒调料品、翻炒等。通过模板方法模式模拟:

java 复制代码
public abstract class AbstractClass {  
    public final void cookProcess() {  
        // 固定的炒菜步骤
        this.pourOil();  
        this.heatOil();  
        this.pourVegetable();   
        this.pourSauce();  
        this.fry();  
    }  
    
    // 倒油、热油、翻炒 是一样的,在抽象类中直接实现
    public void pourOil() { System.out.println("倒油"); }  
    public void heatOil() { System.out.println("热油"); }  
    public void fry() { System.out.println("翻炒"); }  
     
    // 倒蔬菜、倒调料品 取决于蔬菜种类,延迟到子类中实现
    public abstract void pourVegetable();   
    public abstract void pourSauce();  
}

public class ConcreteClassOfTomato extends AbstractClass { 
    @Override  
    public void pourVegetable() {  
        System.out.println("下锅的蔬菜是西红柿");  
    }  
    
    @Override  
    public void pourSauce() {  
        System.out.println("下锅的酱料是盐");  
    }  
}

优点

  1. 提高代码复用

  2. 实现了反向控制,由父类决定整体流程,子类仅提供局部细节的实现,遵守 OCP 开闭原则

缺点

  1. 每当新增一个不同的实现时,都需要定义一个新的子类,导致类个数增加,系统复杂度增加

  2. 反向控制增加了代码阅读的难度

相关推荐
古法老登瞎折腾1 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
智能运维指南2 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
yz_aiks3 小时前
Spring AI 2.1 ChatMemory 已过时用什么替代:迁移到 Session Memory 实战(JDBC 存储与会话压缩)
java·spring boot·大模型·ai agent·spring ai
金銀銅鐵3 小时前
[Java] 用 GUI 展示 EnumMap 增删键值对时的内部变化
java·后端·ai编程
学长毕设3 小时前
基于SpringBoot的上门洗车服务系统设计与实现
java·spring boot·后端
jason成都3 小时前
RTKLIB-Java 多基线联合RTK:FIX率从0%到91.5%的三层根因修复
java·gnss·rtklib·rtklib_java
鱼宵3 小时前
Stream 终端操作一次讲透:collect、count、reduce 怎么选
java·stream·终端操作
白山编程大哥3 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Linux运维技术栈4 小时前
CVE-2026-91403 高危漏洞修复:Rocky Linux 9 多版本 JDK 环境清理实操
java·linux·运维
On The Road :4 小时前
Java 多线程详解:从入门到线程安全
java·python·安全