首页 > Java > java教程 > 正文

在Java中如何使用抽象类实现模板方法

P粉602998670
发布: 2025-10-16 19:01:01
原创
928人浏览过
模板方法模式通过抽象类定义算法骨架,子类实现具体步骤。父类中final的模板方法固定流程,包含抽象方法、具体方法和钩子方法,如Beverage类的prepare()方法。子类Coffee和Tea实现brew()和addCondiments(),可选覆盖钩子customerWantsCondiments()。客户端调用prepare()即可按统一流程执行,输出咖啡和茶的制作过程,体现代码复用与扩展性。

在java中如何使用抽象类实现模板方法

在Java中,模板方法模式通过抽象类定义算法的骨架,把具体实现延迟到子类。这种方式既能复用代码,又能保持灵活性。核心是父类中定义一个final的模板方法,内部调用多个抽象或可重写的方法,由子类提供具体行为。

定义抽象类和模板方法

创建一个抽象类,在其中声明一个final的模板方法,防止被子类修改流程。模板方法中包含算法的步骤,这些步骤可以是抽象方法、具体方法或钩子方法。

例如,定义一个制作饮品的过程:

abstract class Beverage {

    // 模板方法:定义固定流程
    public final void prepare() {
        boilWater();
        brew();
        pourInCup();
        if (customerWantsCondiments()) { // 钩子方法控制流程
            addCondiments();
        }
    }

    // 具体方法(所有子类通用)
    private void boilWater() {
        System.out.println("烧开水");
    }

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

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

    abstract void addCondiments();

    // 钩子方法:默认不执行,子类可选择性覆盖
    boolean customerWantsCondiments() {
        return true;
    }
}
登录后复制

子类实现具体步骤

子类继承抽象类并实现抽象方法,从而定制特定行为。模板方法本身的执行顺序不变,但每一步的具体内容可以不同。

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

在Android
在Android

本文档主要讲述的是在Android-Studio中导入Vitamio框架;介绍了如何将Vitamio框架以Module的形式添加到自己的项目中使用,这个方法也适合导入其他模块实现步骤。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

在Android 0
查看详情 在Android

比如制作咖啡和茶:

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

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

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

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

    // 覆盖钩子,控制是否添加调料
    boolean customerWantsCondiments() {
        return false; // 茶不加调料
    }
}
登录后复制

使用模板方法

客户端只需调用模板方法,无需关心内部流程细节。不同的子类对象会表现出不同的行为,但整体结构一致。

public class Main {
    public static void main(String[] args) {
        Beverage coffee = new Coffee();
        Beverage tea = new Tea();

        System.out.println("准备咖啡:");
        coffee.prepare();

        System.out.println("\n准备茶:");
        tea.prepare();
    }
}
登录后复制

输出结果:

准备咖啡:
烧开水
用沸水冲泡咖啡
倒入杯中
加糖和牛奶

准备茶:
烧开水
用沸水泡茶叶
倒入杯中

基本上就这些。模板方法让公共逻辑集中在父类,变化的部分交给子类处理,既避免了代码重复,又提升了扩展性。关键是把流程控制放在抽象类里,只开放必要的定制点。

以上就是在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号