首页 > Java > java教程 > 正文

Java中模板方法模式实现

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

java中模板方法模式实现

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

基本结构与角色

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

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

代码示例

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

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

立即学习Java免费学习笔记(深入)”;

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;
    }
}
登录后复制

两个具体实现类:

AiPPT模板广场
AiPPT模板广场

AiPPT模板广场-PPT模板-word文档模板-excel表格模板

AiPPT模板广场 147
查看详情 AiPPT模板广场
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中模板方法模式实现的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号