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

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

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

相关推荐
最初的↘那颗心2 分钟前
Flink Stream API - 源码开发需求描述
java·大数据·hadoop·flink·实时计算
华仔啊13 分钟前
别学23种了!Java项目中最常用的6个设计模式,附案例
java·后端·设计模式
在路上`20 分钟前
前端学习之后端小白java的一些理论知识(框架)
java·学习
练习时长两年半的Java练习生(升级中)37 分钟前
从0开始学习Java+AI知识点总结-18.web基础知识(Java操作数据库)
java·学习·web
计算机程序员小杨1 小时前
计算机专业的你懂的:大数据毕设就选贵州茅台股票分析系统准没错|计算机毕业设计|数据可视化|数据分析
java·大数据
y1y1z1 小时前
EasyExcel篇
java·excel
DokiDoki之父1 小时前
多线程—飞机大战排行榜功能(2.0版本)
android·java·开发语言
高山上有一只小老虎2 小时前
走方格的方案数
java·算法
whatever who cares2 小时前
Java 中表示数据集的常用集合类
java·开发语言
JavaArchJourney2 小时前
TreeMap 源码分析
java