软件设计模式:模板方法模式

1. 简介

模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。这样,可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

2. 使用条件

模板方法模式适用于以下情况:

算法的结构相同,但具体步骤可能不同;

需要在不同情况下共享相同的算法,但某些步骤的实现可能不同;

不希望子类覆盖整个算法,只能覆盖部分步骤。

3. 示例场景

假设我们要实现一个炒菜的过程,其中包括选菜、洗菜、炒菜、上菜等步骤。不同的菜品在炒菜的步骤和时间上可能有所不同,但整个炒菜的流程是相同的。

4. Java 代码示例

java 复制代码
abstract class CookDishTemplate {
    public final void cookDish() {
        selectIngredients();
        washIngredients();
        fryIngredients();
        serveDish();
    }

    protected abstract void selectIngredients();

    protected abstract void washIngredients();

    protected abstract void fryIngredients();

    protected abstract void serveDish();
}

class CookVegetableDish extends CookDishTemplate {
    protected void selectIngredients() {
        System.out.println("选择新鲜的蔬菜");
    }

    protected void washIngredients() {
        System.out.println("清洗蔬菜");
    }

    protected void fryIngredients() {
        System.out.println("炒蔬菜");
    }

    protected void serveDish() {
        System.out.println("上菜:蔬菜炒鸡蛋");
    }
}

class CookMeatDish extends CookDishTemplate {
    protected void selectIngredients() {
        System.out.println("选择新鲜的肉类");
    }

    protected void washIngredients() {
        System.out.println("清洗肉类");
    }

    protected void fryIngredients() {
        System.out.println("炒肉类");
    }

    protected void serveDish() {
        System.out.println("上菜:红烧肉");
    }
}

public class TemplateMethodPatternExample {
    public static void main(String[] args) {
        CookDishTemplate vegetableDish = new CookVegetableDish();
        CookDishTemplate meatDish = new CookMeatDish();

        System.out.println("炒菜流程:");
        vegetableDish.cookDish();
        System.out.println();

        System.out.println("炒肉流程:");
        meatDish.cookDish();
    }
}

5. 结论

模板方法模式通过定义算法的骨架和具体步骤,实现了代码复用和扩展的便利性。在设计时,应该根据具体情况选择合适的设计模式,以提高代码的可维护性和可扩展性。

相关推荐
想做小南娘,发现自己是女生喵15 小时前
第 2 章 顺序表和 vector
java·数据结构·算法
CHANG_THE_WORLD16 小时前
6.多线程的TCP通信
java·网络·tcp/ip
sun032217 小时前
【笔记】Spring MVC 相关介绍
java·spring·mvc
兰令水17 小时前
hot100【acm版】【2026.7.18打卡-java版本】
java·开发语言·算法
CoderYanger17 小时前
A.每日一题:3020. 子集中元素的最大数量
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
wear工程师18 小时前
CompletableFuture 的 allOf 到底怎么收结果?面试别只说并行
java·后端
倒流时光三十年18 小时前
Logback 系列(3):三大核心组件 Logger / Appender / Encoder
java·开发语言·logback
解局易否结局18 小时前
ArkUI MVI 架构实战:单向数据流设计模式在 HarmonyOS NEXT 中的深度实践
华为·设计模式·架构·harmonyos
什巳18 小时前
JAVA练习312- 二叉搜索树中第 K 小的元素
java·数据结构·算法·leetcode
倒流时光三十年19 小时前
Logback 系列(7):常用 Appender(控制台 / 文件 / 滚动文件)
java·前端·logback