设计模式-模板方法模式使用方法

模板方法模式(Template Method Pattern)是一种行为设计模式,它在一个方法中定义一个算法的骨架,将一些步骤的实现延迟到子类中。通过这种方式,模板方法允许子类在不改变算法结构的情况下重新定义算法的某些特定步骤。

模板方法模式主要涉及两个角色:

  1. 抽象类(Abstract Class):定义模板方法和算法的骨架。模板方法一般是一个不可变的方法,它由一系列方法调用组成,包括抽象方法和钩子(hook)方法。
  2. 具体类(Concrete Class):实现抽象类中定义的抽象方法,以完成算法中与特定子类相关的步骤。

如何实现模板方法模式

以下是在 Java 中实现模板方法模式的步骤和示例。

  1. 定义抽象类:
1public abstract class AbstractClass {
2    // 模板方法,定义算法的骨架
3    public final void templateMethod() {
4        baseOperation1();
5        requiredOperation1();
6        baseOperation2();
7        hook();
8        requiredOperation2();
9    }
10
11    // 基本操作,已经有了实现
12    protected void baseOperation1() {
13        System.out.println("基本操作1");
14    }
15
16    // 基本操作,已经有了实现
17    protected void baseOperation2() {
18        System.out.println("基本操作2");
19    }
20
21    // 抽象操作,由子类实现
22    protected abstract void requiredOperation1();
23
24    // 抽象操作,由子类实现
25    protected abstract void requiredOperation2();
26
27    // 钩子方法,子类可以视情况决定是否覆盖它
28    protected void hook() {}
29}
  1. 创建具体子类:
1public class ConcreteClass extends AbstractClass {
2    @Override
3    protected void requiredOperation1() {
4        System.out.println("具体类实现的操作1");
5    }
6
7    @Override
8    protected void requiredOperation2() {
9        System.out.println("具体类实现的操作2");
10    }
11
12    @Override
13    protected void hook() {
14        System.out.println("具体类覆盖了钩子方法");
15    }
16}
  1. 客户端使用模板方法:
1public class Demo {
2    public static void main(String[] args) {
3        AbstractClass abstractClass = new ConcreteClass();
4        // 调用模板方法,它会按照定义的顺序执行算法步骤
5        abstractClass.templateMethod();
6    }
7}

在这个例子中,AbstractClass 定义了一个名为 templateMethod 的方法,它是一个算法的骨架。这个方法按特定的顺序调用了其他的方法,其中一些方法是抽象的(requiredOperation1 和 requiredOperation2),必须由子类提供实现。还有一些方法是具体的(baseOperation1 和 baseOperation2),在抽象类中实现,子类可以直接使用。最后,有一个钩子方法(hook),子类可以视情况覆盖它以影响算法的流程。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员爱学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值