侧边栏壁纸
博主头像
拾荒的小海螺博主等级

只有想不到的,没有做不到的

  • 累计撰写 224 篇文章
  • 累计创建 19 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

JAVA:模板方法模式(Template Method Pattern)的技术指南

拾荒的小海螺
2025-05-30 / 0 评论 / 0 点赞 / 10 阅读 / 4383 字

1、简述

模板方法模式(Template Method Pattern)是一种行为型设计模式,它通过定义一个模板方法,将算法的结构定义在基类中,但允许子类重写某些步骤的实现。通过这种方式,可以在保持算法结构一致的前提下,实现算法的灵活扩展。

image-rjgv.png

设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git


2、 核心思想

模板方法模式的核心在于:

  • 固定流程:在基类中定义一个方法,包含算法的整体流程。
  • 可扩展性:允许子类实现或重写流程中的某些具体步骤。

模板方法模式由以下几个核心角色组成:

  • 抽象类(AbstractClass):定义算法的骨架和模板方法,并声明部分抽象方法,供子类实现。
  • 具体类(ConcreteClass):实现抽象方法,并根据具体需求自定义行为。
  • 模板方法(TemplateMethod):在抽象类中定义,调用一系列基本方法,完成算法整体逻辑。

3. 实际案例

假设我们需要制作不同种类的饮料,如茶和咖啡。制作饮料的流程是固定的:

  • 煮水。
  • 冲泡饮料。
  • 倒入杯中。
  • 添加调料。

不同饮料的步骤如"冲泡"和"添加调料"可以由子类实现。

// 抽象类:饮料
abstract class Beverage {
    // 模板方法
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    private void boilWater() {
        System.out.println("Boiling water");
    }

    private void pourInCup() {
        System.out.println("Pouring into cup");
    }

    // 抽象方法,子类实现
    protected abstract void brew();
    protected abstract void addCondiments();
}

// 具体类:茶
class Tea extends Beverage {
    @Override
    protected void brew() {
        System.out.println("Steeping the tea");
    }

    @Override
    protected void addCondiments() {
        System.out.println("Adding lemon");
    }
}

// 具体类:咖啡
class Coffee extends Beverage {
    @Override
    protected void brew() {
        System.out.println("Dripping coffee through filter");
    }

    @Override
    protected void addCondiments() {
        System.out.println("Adding sugar and milk");
    }
}

// 测试类
public class TemplateMethodDemo {
    public static void main(String[] args) {
        Beverage tea = new Tea();
        System.out.println("Making tea:");
        tea.prepareRecipe();

        System.out.println();

        Beverage coffee = new Coffee();
        System.out.println("Making coffee:");
        coffee.prepareRecipe();
    }
}

输出结果:

Making tea:
Boiling water
Steeping the tea
Pouring into cup
Adding lemon

Making coffee:
Boiling water
Dripping coffee through filter
Pouring into cup
Adding sugar and milk

4、优缺点

优点

  • 代码复用:模板方法在基类中实现公共逻辑,减少代码重复。
  • 灵活性:允许子类覆盖部分逻辑,满足特定需求。
  • 一致性:确保算法的整体结构在各个子类中保持一致。

缺点

  • 对子类的依赖:实现模板方法需要依赖子类的具体实现,可能导致子类数量增加。
  • 复杂性增加:当模板方法涉及的步骤较多时,代码可能变得难以维护。

5、应用场景

  • 固定流程的场景:如数据处理的多步骤操作、文档生成流程等。
  • 具有相似逻辑的系统:如游戏中的关卡生成、报告生成工具。
  • 框架设计:模板方法模式在框架中应用广泛,允许用户扩展具体功能。

6、总结

模板方法模式是一种非常实用的设计模式,尤其适合需要复用固定逻辑并允许灵活扩展的场景。在实际开发中,可以通过它来提高代码的可复用性和一致性,同时保持足够的灵活性。

希望本文能帮助您更好地理解和应用模板方法模式!如果有任何问题或建议,欢迎留言交流!

0

评论区