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

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 小时前
MVCC底层原理实现
java·数据库·mvcc原理
组合缺一1 小时前
Solon Cloud Gateway 开发:熟悉 ExContext 及相关接口
java·后端·gateway·solon
一只淡水鱼662 小时前
【spring】集成JWT实现登录验证
java·spring·jwt
忘忧人生2 小时前
docker 部署 java 项目详解
java·docker·容器
null or notnull3 小时前
idea对jar包内容进行反编译
java·ide·intellij-idea·jar
angen20184 小时前
二十三种设计模式-享元模式
设计模式·享元模式
言午coding4 小时前
【性能优化专题系列】利用CompletableFuture优化多接口调用场景下的性能
java·性能优化
缘友一世4 小时前
JAVA设计模式:依赖倒转原则(DIP)在Spring框架中的实践体现
java·spring·依赖倒置原则
何中应5 小时前
从管道符到Java编程
java·spring boot·后端
SummerGao.5 小时前
springboot 调用 c++生成的so库文件
java·c++·.so