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

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. 结论

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

相关推荐
拼搏@1 小时前
第十六天,7月10日,八股
java·mybatis
Sylvia-girl5 小时前
Java——抽象类
java·开发语言
Touper.8 小时前
Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
java·数据库·redis
m0_535064608 小时前
C++模版编程:类模版与继承
java·jvm·c++
虾条_花吹雪9 小时前
Using Spring for Apache Pulsar:Message Production
java·ai·中间件
tomorrow.hello9 小时前
Java并发测试工具
java·开发语言·测试工具
Moso_Rx9 小时前
javaEE——synchronized关键字
java·java-ee
张小洛9 小时前
Spring AOP 是如何生效的(入口源码级解析)?
java·后端·spring
DKPT9 小时前
Java设计模式之行为型模式(观察者模式)介绍与说明
java·笔记·学习·观察者模式·设计模式
追风少年浪子彦10 小时前
mapstruct与lombok冲突原因及解决方案
java·spring boot·spring·spring cloud