设计模式-模板方法模式

什么是模版方法模式?

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的接口就可以重新定义该算法的某些特定步骤。

用法

  • 某些类别的算法中,实做了相同的方法,造成程式码的重复。
  • 控制子类别必须遵守的一些事项。

Spring Boot实现模板方法模式的简单案例

1. 定义抽象模板类

创建一个抽象类 AbstractTemplate,它定义了算法的框架,并包含一些抽象方法供子类实现。

public abstract class AbstractTemplate {

    // 模板方法,定义了算法的框架
    public final void templateMethod() {
        step1();
        step2();
        step3();
    }

    // 具体步骤1,子类必须实现
    protected abstract void step1();

    // 具体步骤2,子类必须实现
    protected abstract void step2();

    // 具体步骤3,子类可以选择重写
    protected void step3() {
        System.out.println("AbstractTemplate: Default implementation of step3");
    }
}
2. 创建具体子类

创建两个具体子类 ConcreteTemplateA 和 ConcreteTemplateB,它们分别实现了抽象类中的抽象方法。

@Component
public class ConcreteTemplateA extends AbstractTemplate {

    @Override
    protected void step1() {
        System.out.println("ConcreteTemplateA: Step 1");
    }

    @Override
    protected void step2() {
        System.out.println("ConcreteTemplateA: Step 2");
    }

    @Override
    protected void step3() {
        System.out.println("ConcreteTemplateA: Custom implementation of step3");
    }
}

@Component
public class ConcreteTemplateB extends AbstractTemplate {

    @Override
    protected void step1() {
        System.out.println("ConcreteTemplateB: Step 1");
    }

    @Override
    protected void step2() {
        System.out.println("ConcreteTemplateB: Step 2");
    }
}
3. 使用模板方法

在Spring Boot的Service或Controller中使用这些模板类。

@Service
public class TemplateService {

    @Autowired
    private ConcreteTemplateA concreteTemplateA;

    @Autowired
    private ConcreteTemplateB concreteTemplateB;

    public void executeTemplates() {
        System.out.println("Executing ConcreteTemplateA:");
        concreteTemplateA.templateMethod();

        System.out.println("\nExecuting ConcreteTemplateB:");
        concreteTemplateB.templateMethod();
    }
}
4. 创建Controller

创建一个简单的Controller来调用Service中的方法。

@RestController
@RequestMapping("/template")
public class TemplateController {

    @Autowired
    private TemplateService templateService;

    @GetMapping("/execute")
    public String executeTemplates() {
        templateService.executeTemplates();
        return "Templates executed!";
    }
}
5. 运行项目

启动Spring Boot应用程序,并访问 http://localhost:8080/template/execute,你将看到以下输出

Executing ConcreteTemplateA:
ConcreteTemplateA: Step 1
ConcreteTemplateA: Step 2
ConcreteTemplateA: Custom implementation of step3

Executing ConcreteTemplateB:
ConcreteTemplateB: Step 1
ConcreteTemplateB: Step 2
AbstractTemplate: Default implementation of step3
6. 总结

在这个案例中,AbstractTemplate 类定义了算法的框架,而 ConcreteTemplateA 和 ConcreteTemplateB 分别实现了具体的步骤。通过这种方式,模板方法设计模式允许你在不改变算法结构的情况下,灵活地重写算法的某些步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lixianchuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值