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

发布于:2025-02-27 ⋅ 阅读:(11) ⋅ 点赞:(0)

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

模板方法模式定义了一个操作中的算法骨架,将一些步骤的实现延迟到子类中。使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。


假设有一个饮品制作流程,包括烧水、冲泡 / 酿造、倒入杯子、添加调料等步骤。不同的饮品(如咖啡和茶)在冲泡 / 酿造和添加调料这两个步骤可能有所不同,而烧水和倒入杯子步骤是通用的。可以使用模板方法模式来实现这个流程。

// 抽象类,定义饮品制作的模板方法
abstract class BeverageMaker {
    // 模板方法,定义制作饮品的整体流程
    public final void prepareBeverage() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    // 烧水,通用步骤
    public void boilWater() {
        System.out.println("烧水");
    }

    // 冲泡/酿造,具体实现由子类完成
    public abstract void brew();

    // 倒入杯子,通用步骤
    public void pourInCup() {
        System.out.println("倒入杯子");
    }

    // 添加调料,具体实现由子类完成
    public abstract void addCondiments();
}

// 咖啡制作类,继承自 BeverageMaker
class CoffeeMaker extends BeverageMaker {
    @Override
    public void brew() {
        System.out.println("冲泡咖啡粉");
    }

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

// 茶制作类,继承自 BeverageMaker
class TeaMaker extends BeverageMaker {
    @Override
    public void brew() {
        System.out.println("浸泡茶叶");
    }

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

// 客户端代码
public class BeverageExample {
    public static void main(String[] args) {
        BeverageMaker coffeeMaker = new CoffeeMaker();
        coffeeMaker.prepareBeverage();

        System.out.println();

        BeverageMaker teaMaker = new TeaMaker();
        teaMaker.prepareBeverage();
    }
}