设计模式 - 模板方法模式

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

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

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. 反向控制增加了代码阅读的难度

相关推荐
楼田莉子21 分钟前
同步/异步日志系统:日志落地模块\日志器模块\异步日志模块
linux·服务器·c++·学习·设计模式
亦暖筑序34 分钟前
Spring AI Alibaba 报错合集:我踩过的那些坑
java·后端
indexsunny1 小时前
互联网大厂Java面试实战:核心技术与微服务架构在电商场景中的应用
java·spring boot·redis·kafka·maven·spring security·microservices
摇滚侠1 小时前
Java 多线程基础 Java Multithreading Basics
java
今天你TLE了吗1 小时前
LLM到Agent&RAG——AI概念概述 第一章:大模型
java·人工智能·语言模型·大模型
你的牧游哥1 小时前
Java 核心概念详解
java·开发语言
深邃-1 小时前
【数据结构与算法】-顺序表链表经典算法
java·c语言·数据结构·c++·算法·链表·html5
JAVA学习通1 小时前
励志从零打造LeetCode平台之C端竞赛列表
java·vscode·leetcode·docker·状态模式
海兰1 小时前
【第3篇-续】多模型多模态项目实现示例(增加OpenAI通用适配)附源代码
java·人工智能·spring boot·alibaba·spring ai
澄澈青空~1 小时前
有一个叫R2C,也有一个叫G2C
java·数据库·人工智能·c#