当前位置:首页 > Java > 正文

掌握Java模板方法模式(从零开始学模板方法设计模式)

在面向对象编程中,Java模板方法模式是一种非常实用且常见的行为型设计模式。它允许你定义一个算法的骨架,而将一些具体步骤延迟到子类中实现。这样,子类可以在不改变算法结构的情况下,重新定义该算法的某些特定步骤。

本教程将带你从零开始理解并实现模板方法设计模式,即使你是编程小白,也能轻松上手!

掌握Java模板方法模式(从零开始学模板方法设计模式) Java模板方法模式 模板方法设计模式 Java设计模式教程 模板方法实现示例 第1张

一、什么是模板方法模式?

模板方法模式的核心思想是:在一个抽象类中定义一个操作中的算法骨架(即模板方法),而将一些步骤延迟到子类中。模板方法使得子类可以不改变算法结构即可重定义该算法的某些特定步骤。

这种模式非常适合用于以下场景:

  • 多个子类有公有的方法,并且逻辑基本相同
  • 重要、复杂的算法,可以把核心算法设计为模板方法
  • 重构时,把相同代码抽到父类,不同部分留给子类实现

二、模板方法模式的结构

模板方法模式通常包含以下几个角色:

  • AbstractClass(抽象类):定义抽象的原语操作(primitive operations),供子类实现;同时提供模板方法,定义算法骨架。
  • ConcreteClass(具体子类):实现父类定义的抽象方法,完成特定步骤。

三、动手写一个模板方法示例

假设我们要制作两种饮料:咖啡和茶。它们的冲泡流程很相似:烧水 → 冲泡 → 倒入杯中 → 添加调料。但“冲泡”和“添加调料”这两个步骤不同。

我们可以用Java模板方法模式来优雅地解决这个问题。

1. 定义抽象基类 Beverage

public abstract class Beverage {    // 模板方法:定义算法骨架,使用 final 防止子类覆盖    public final void prepareRecipe() {        boilWater();        brew();        pourInCup();        addCondiments();    }    // 共同方法    private void boilWater() {        System.out.println("烧水...");    }    private void pourInCup() {        System.out.println("倒入杯中...");    }    // 抽象方法,由子类实现    protected abstract void brew();    protected abstract void addCondiments();}

2. 实现具体子类 Coffee

public class Coffee extends Beverage {    @Override    protected void brew() {        System.out.println("用沸水冲泡咖啡粉...");    }    @Override    protected void addCondiments() {        System.out.println("加入糖和牛奶...");    }}

3. 实现具体子类 Tea

public class Tea extends Beverage {    @Override    protected void brew() {        System.out.println("用沸水浸泡茶叶...");    }    @Override    protected void addCondiments() {        System.out.println("加入柠檬片...");    }}

4. 测试类

public class TemplateMethodDemo {    public static void main(String[] args) {        System.out.println("--- 制作咖啡 ---");        Beverage coffee = new Coffee();        coffee.prepareRecipe();        System.out.println("\n--- 制作茶 ---");        Beverage tea = new Tea();        tea.prepareRecipe();    }}

运行结果:

--- 制作咖啡 ---烧水...用沸水冲泡咖啡粉...倒入杯中...加入糖和牛奶...--- 制作茶 ---烧水...用沸水浸泡茶叶...倒入杯中...加入柠檬片...

四、模板方法模式的优点

  • 封装不变部分,扩展可变部分:算法骨架固定,细节可由子类定制。
  • 代码复用:公共逻辑放在父类,避免重复代码。
  • 符合开闭原则:对扩展开放(新增子类),对修改关闭(不改模板方法)。

五、总结

通过本教程,我们学习了如何使用Java模板方法模式来组织具有相同流程但细节不同的算法。这是一种非常实用的Java设计模式教程中必学的内容。

记住:模板方法的关键在于——定义算法骨架,延迟具体实现。希望这个模板方法实现示例能帮助你更好地理解这一设计模式!

继续练习,你也能成为设计模式高手!