行为型模式-3.模板方法模式(Template Method Pattern)

 2024-07-29    0 条评论    66 浏览

设计模式

模板方法模式定义了一个算法的蓝图,但将某些步骤延迟到子类中。模板方法包含一个用于定义算法主要步骤的执行方法,而子类可以重写该方法中的某些步骤来改变算法的具体实现。

Java 代码示例:

// 抽象类,模板方法
abstract class CaffeineBeverage {
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    // 模板方法,子类必须重写
    protected abstract void brew();

    // 基本步骤,由父类提供
    private void boilWater() {
        System.out.println("Boiling water");
    }

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

    private void addCondiments() {
        System.out.println("Adding");
    }
}

// 子类,重写brew方法
class Coffee extends CaffeineBeverage {
    @Override
    protected void brew() {
        System.out.println("Dripping coffee through filter");
    }
}

// 另一个子类
class Tea extends CaffeineBeverage {
    @Override
    protected void brew() {
        System.out.println("Steeping the tea bag");
    }
}

public class TemplateMethodPatternDemo {
    public static void main(String[] args) {
        Coffee coffee = new Coffee();
        coffee.prepareRecipe();

        Tea tea = new Tea();
        tea.prepareRecipe();
    }
}

解释:

  1. CaffeineBeverage 是抽象类,定义了 prepareRecipe 模板方法。
  2. prepareRecipe 方法包含了咖啡饮料的准备步骤,包括煮水、冲泡、倒入杯子、添加调味料。
  3. brew 是抽象方法,由子类实现。
  4. CoffeeTea 子类分别重写了 brew 方法,实现各自的冲泡方式。
  5. 当调用 prepareRecipe 方法时,模板方法会执行基本步骤,并根据子类的实现调用不同的 brew 方法。

优点:

  • 代码复用: 模板方法模式可以将算法的公共部分封装在父类中,子类可以继承和重写特定部分。

  • 扩展性: 容易添加新的子类,实现新的算法变体。

  • 可读性: 模板方法模式使得算法的逻辑更加清晰和结构化。

  • 维护性: 修改算法的核心逻辑只需要修改父类的模板方法,而不需要修改所有子类。