模板模式

模板模式

定义

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

demo

比如做饮料(泡茶 or 冲咖啡)

1. 定义模板父类:BeverageTemplate

public abstract class BeverageTemplate {

    // 模板方法:固定流程,不允许子类更改
    public final void prepareBeverage() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    // 这些步骤有默认实现
    protected void boilWater() {
        System.out.println("Boiling water...");
    }

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

    // 抽象方法,交给子类实现
    protected abstract void brew();
    protected abstract void addCondiments();
}

2. 写两个具体子类:Tea 和 Coffee

import org.springframework.stereotype.Component;

@Component
public class Tea extends BeverageTemplate {
    @Override
    protected void brew() {
        System.out.println("Steeping the tea...");
    }

    @Override
    protected void addCondiments() {
        System.out.println("Adding lemon...");
    }
}
import org.springframework.stereotype.Component;

@Component
public class Coffee extends BeverageTemplate {
    @Override
    protected void brew() {
        System.out.println("Dripping coffee through filter...");
    }

    @Override
    protected void addCondiments() {
        System.out.println("Adding sugar and milk...");
    }
}

3. 测试

import org.example.design_pattern.Template.Coffee;
import org.example.design_pattern.Template.Tea;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
class DesignPatternApplicationTests {

    @Autowired
    private Tea tea;

    @Autowired
    private Coffee coffee;

    @Test
    public void testProxy() {
        System.out.println("准备茶:");
        tea.prepareBeverage();

        System.out.println("\n准备咖啡:");
        coffee.prepareBeverage();
    }
}

4. 输出

准备茶:
Boiling water...
Steeping the tea...
Pouring into cup...
Adding lemon...

准备咖啡:
Boiling water...
Dripping coffee through filter...
Pouring into cup...
Adding sugar and milk...

Spring中的示例

  1. JdbcTemplate(封装了JDBC的繁琐流程(连接、异常处理、资源清理),用户只需关注SQL和结果映射。)
  2. RestTemplate(封装HTTP请求处理,如状态码检查、数据转换。)
  3. TransactionTemplate(管理事务的提交和回滚,用户只需编写业务逻辑。)
posted @ 2025-04-27 19:37  Eiffelzero  阅读(20)  评论(0)    收藏  举报