登录
首页 >  文章 >  java教程

Java模板方法模式教程与实现解析

时间:2025-09-29 13:10:31 179浏览 收藏

目前golang学习网上已经有很多关于文章的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《Java模板方法模式详解与实现》,也希望能帮助到大家,如果阅读完后真的对你学习文章有帮助,欢迎动动手指,评论留言并分享~

模板方法模式通过父类定义算法骨架,子类实现具体步骤。抽象类Beverage中prepare()为final模板方法,规定流程顺序,包含共用的boilWater()和pourInCup(),以及需子类实现的brew()、addCondiments(),还提供可选钩子shouldAddCondiments()。Coffee和Tea继承Beverage,分别实现冲泡与调料逻辑,其中Tea覆盖钩子禁用调料。测试类TemplateMethodDemo验证咖啡与茶的制备流程。该模式封装不变逻辑,扩展可变部分,提升复用性,适用于流程固定但细节不同的场景,如框架设计或构建流水线。

Java中模板方法模式实现

模板方法模式属于行为型设计模式,它在父类中定义算法的骨架,而将一些具体步骤延迟到子类中实现。这种模式让子类可以在不改变算法结构的前提下重新定义算法的某些步骤。

基本结构与角色

抽象类(Abstract Class):定义算法的模板方法,包含多个抽象方法或钩子方法,模板方法通常被声明为final,防止子类修改流程。

具体类(Concrete Class):继承抽象类,实现其中的抽象方法,完成特定逻辑。

代码示例

以下是一个制作饮品的简单例子:

定义一个抽象类 Beverage,其中模板方法 prepare() 规定了冲泡饮料的固定流程:

abstract class Beverage {

    // 模板方法,定义算法骨架
    public final void prepare() {
        boilWater();
        brew();
        pourInCup();
        if (shouldAddCondiments()) { // 钩子方法控制可选步骤
            addCondiments();
        }
    }

    // 共用步骤
    private void boilWater() {
        System.out.println("烧开水");
    }

    private void pourInCup() {
        System.out.println("倒入杯中");
    }

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

    abstract void addCondiments();

    // 钩子方法,默认行为可被子类覆盖
    boolean shouldAddCondiments() {
        return true;
    }
}

两个具体实现类:

class Coffee extends Beverage {
    @Override
    void brew() {
        System.out.println("用沸水冲泡咖啡");
    }

    @Override
    void addCondiments() {
        System.out.println("加入糖和牛奶");
    }
}

class Tea extends Beverage {
    @Override
    void brew() {
        System.out.println("用沸水泡茶叶");
    }

    @Override
    void addCondiments() {
        System.out.println("加入柠檬");
    }

    // 覆盖钩子方法,选择不加调料
    @Override
    boolean shouldAddCondiments() {
        return false;
    }
}

测试调用:

public class TemplateMethodDemo {
    public static void main(String[] args) {
        Beverage coffee = new Coffee();
        System.out.println("准备咖啡:");
        coffee.prepare();

        System.out.println("\n准备茶:");
        Beverage tea = new Tea();
        tea.prepare();
    }
}

关键点说明

模板方法的核心在于封装不变部分,扩展可变部分

  • 模板方法本身通常是 final 的,避免子类篡改流程顺序。
  • 抽象方法强制子类实现特定步骤。
  • 钩子方法提供默认行为,子类可选择是否覆盖,实现流程分支控制。
  • 公共步骤在父类中实现一次即可,提高代码复用性。

适用场景

当多个子类有相似的行为流程,且存在共用代码时,使用模板方法可以消除重复。

  • 框架设计中定义执行流程,如Spring中的JdbcTemplate。
  • 构建构建流程、数据处理流水线等固定步骤但细节不同的场景。
  • 需要控制子类扩展点,防止流程被破坏的情况。

基本上就这些,掌握好抽象类与方法的划分,就能灵活运用模板方法模式。

终于介绍完啦!小伙伴们,这篇关于《Java模板方法模式教程与实现解析》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>